Bonjour,
Je cherchais une macro pour faire l'equivalent de l'action [Alt + TAB] (changer de document actif) et j'ai trouve ce code:
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
et ca marche parfaitement lorsque le lance cette macro directement via SolidWorks.
Mon probleme est que je suis en train de creer un outils qui se lance via Excel et donc doit ecrire toute mes macros sous VBA Excel et non VBA Solidworks.
lorsque je copie/colle ce code dans ma macro Excel, voici le message d'erreur que j'ai:
run-time error '438'
Object doesn't support this property or method
si je clique sur debug, il me surligne cette ligne
Set swApp = Application.SldWorks
j'ai essaye plusieurs choses mais je n'ai plus trop d'idee...
Sur des precedantes macros j'ai ce code:
Set swApp = CreateObject("SldWorks.application")
J'ai donc essaye de faire la meme pour celle ci mais ca ne marche pas je recupere ce message d'erreur:
Run-time error'13':
Tpe mismatch
pointant sur cette ligne:
swApp.ActivateDoc2 opendocs(1), False, 0
sur VBA Excel j'ai les references SldWorks 2017 Type Library, SOLIDWORKS 2017 Commends type library et SOLIDWORKS 2017 Constant type library d'activees.
Est-ce que quelqu'un a des idees?
Merci d'avance
Yves