Witam
Szukałem makra, które wykonałoby odpowiednik akcji [Alt + TAB] (zmiana aktywnego dokumentu) i znalazłem taki kod:
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim vModels As Variant
Dim count As Integer
Dim opendocs As New Collection
Dim docname As Variant
Dim currentdocTitle As String
Dim title As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
currentdocTitle = swModel.GetTitle
vModels = swApp.GetDocuments
For count = LBound(vModels) To UBound(vModels) 'get list of open documents
Set swModel = vModels(count)
If swModel.Visible <> False Then
opendocs.Add (swModel.GetTitle)
End If
Next
count = 0
If opendocs(opendocs.count) = currentdocTitle Then ' if its the last document in the list, switch to the first document
swApp.ActivateDoc2 opendocs(1), False, 0
End
Else ' else find the next document and activate
For count = 1 To opendocs.count
If opendocs(count) = currentdocTitle Then
swApp.ActivateDoc2 opendocs(count + 1), False, 0
End
End If
Next
End If
End Sub
i działa doskonale, gdy uruchamia to makro bezpośrednio przez SolidWorks.
Mój problem polega na tym, że tworzę narzędzie, które uruchamia się przez Excela i dlatego musi pisać wszystkie moje makra w VBA Excel, a nie VBA Solidworks.
kiedy kopiuję/wklejam ten kod do makra programu Excel, oto komunikat o błędzie, który otrzymuję:
run-time error '438'
Object doesn't support this property or method
Jeśli kliknę na debug, podświetli mi ten wiersz
Set swApp = Application.SldWorks
Próbowałem kilku rzeczy, ale nie mam już zbyt dużego pomysłu...
Na poprzednich makrach mam taki kod:
Set swApp = CreateObject("SldWorks.application")
Więc próbowałem zrobić to samo dla tego, ale to nie działa, otrzymuję ten komunikat o błędzie:
Run-time error'13':
Tpe mismatch
wskazując na tę linię:
swApp.ActivateDoc2 opendocs(1), False, 0
w VBA Excel mam włączone referencje Biblioteka typów SldWorks 2017, biblioteka typów SOLIDWORKS 2017 Commends i biblioteka typów SOLIDWORKS 2017 Constant .
Czy ktoś ma jakieś pomysły?
Z góry dziękuję
Yves