Nun, mit Ihrer Hilfe habe ich es geschafft, etwas zu tun, das wahrscheinlich nicht optimal ist, aber zu funktionieren scheint. Die Offenheit der Kinder ist in der Tat notwendig.
ob es helfen kann
'**********************
"Urheberrecht(C) 2023 Xarial Pty Limited
'Referenz: Durchlaufen des Komponentenbaums mit der SOLIDWORKS API
'Lizenz: Lizenz
'**********************
Option Explizit
Dim swApp als SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dimmen des Teils als SldWorks.ModelDoc2
Sun SelMgr As SldWorks.SelectionMgr
Dim swFeatMgr As SldWorks.FeatureManager
Dimmen path_complete As String' volle Länge des Stücks
MyError so lange dimmen
MyWarning so lange dimmen
Anführungszeichen als Zeichenfolge dimmen
Dim boolstatus als boolescher Wert
Dim longstatus As Long, longwarnings As Long
Dim ext als Zeichenfolge
const INDENT_SYMBOL als Zeichenfolge = " "
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If Not swModel Is Nothing Then
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set SelMgr = Part.SelectionManager
Set swFeatMgr = Part.FeatureManager
' Show Component Descriptions is set to true
swFeatMgr.ShowComponentDescriptions = True
' Show Component Configuration Names is set to false
swFeatMgr.ShowComponentConfigurationNames = True
' Show Component Configuration Descriptions is set to false
swFeatMgr.ShowComponentConfigurationDescriptions = False
' Show Component Names
swFeatMgr.ShowComponentNames = False
swFeatMgr.ShowDisplayStateNames = False
Dim swRootComp As SldWorks.Component2
Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent
TraverseComponent swRootComp, ""
Else
MsgBox "Please open assembly"
End If
Ende Sub
Sub TraverseComponent(comp als SldWorks.Component2, Einzug als Zeichenfolge)
Dim vChildComps As Variant
vChildComps = comp.GetChildren
Dim i As Integer
For i = 0 To UBound(vChildComps)
Dim swChildComp As SldWorks.Component2
Set swChildComp = vChildComps(i)
Debug.Print indent & swChildComp.Name2 & " (" & swChildComp.GetPathName() & ")"
TraverseComponent swChildComp, indent & INDENT_SYMBOL
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
' Set SelMgr = Part.SelectionManager
' Set swFeatMgr = Part.FeatureManager
' Öffnet die Loop-Datei
ext = Rechts(swChildComp.GetPathName(), 6)
"Wenn es ein Teil ist
Wenn ext = "sldprt" Dann
Set Part = swApp.OpenDoc6(swChildComp.GetPathName(), 1, 0, "", longstatus, longwarnings)
Oder
"Es ist kein Kredit"
Wenn ext = "sldasm" Dann
'////aSM
Set Part = swApp.OpenDoc6(swChildComp.GetPathName(), 2, 0, "", longstatus, longwarnings)
Else
MsgBox "pas d'extension trouvée"
End If
Ende, wenn
''Ändert die Anzeige des SW-Baums
Set SelMgr = Part.SelectionManager
Set swFeatMgr = Part.FeatureManager
' Show Component Descriptions is set to true
swFeatMgr.ShowComponentDescriptions = True
' Show Component Configuration Names is set to false
swFeatMgr.ShowComponentConfigurationNames = True
' Show Component Configuration Descriptions is set to false
swFeatMgr.ShowComponentConfigurationDescriptions = False
' Show Component Names
swFeatMgr.ShowComponentNames = False
swFeatMgr.ShowDisplayStateNames = False
' MsgBox ' vor dem Schließen der Datei
''ferme le fichier de la boucle
swApp.CloseDoc Teil.GetPathName
Set Part = Nichts
Next
Ende Sub