Makro-VBA zum Exportieren benutzerdefinierter Eigenschaften einer Baugruppe und ihrer untergeordneten Elemente

Hallo

Ich möchte ein Makro erstellen, um einige benutzerdefinierte Eigenschaften einer bereits in SolidWorks geöffneten Baugruppe, aber auch all dieser untergeordneten Elemente zu exportieren.

Ich habe bereits ein Makro erstellt, das die benutzerdefinierten Eigenschaften einer Baugruppe oder eines Teils herauszieht und in einer Excel-Datei speichert. (alles funktioniert gut)

Mein Problem ist sehr einfach. Ich kann die Teile seit der Montage nicht mehr öffnen.
Ich kann sehen, dass es sich um eine Assembly handelt, ich kann durch den Baum gehen und den vollständigen Pfad aller untergeordneten Elemente finden, aber ich kann nicht jedes untergeordnete Element öffnen, um die benutzerdefinierten Eigenschaften zu extrahieren ...
Wenn du eine Idee hast, bin ich dafür.
Unten ist mein Code ohne den Teil zur Wiederherstellung benutzerdefinierter Eigenschaften, da das nicht das Problem ist.
Die Zeile " swApp.OpenDoc6 swChildComp.GetPathName(), 1, 0, "", 0, 0 " sollte die Kinder öffnen, falls ich mich irre.
Der Debug-Print " Debug.Print indent & swChildComp.Name2 & " (" & swChildComp.GetPathName() & " ) " gibt mir den Weg zu den betreffenden Kindern.

Texte préformaté’**********************
"Urheberrecht(C) 2023 Xarial Pty Limited
"Referenz: https://www.codestack.net/solidworks-api/document/assembly/components/traversing-tree/
"Lizenz: https://www.codestack.net/license/
'**********************
Option Explizit
Dim swApp als SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dimmen des Teils als SldWorks.ModelDoc2
Dim SelMgr As SldWorks.SelectionMgr
Dim swFeatMgr As SldWorks.FeatureManager
Dim path_complete As String 'chemin complet de la pièce
MyError so lange dimmen
MyWarning so lange dimmen

Dim guillemet Als Schnur
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




    Dim swRootComp As SldWorks.Component2

    Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent
    
 ' MsgBox "avant de rentrer dans la première boucle des enfants"
  
    TraverseComponent swRootComp, ""
    

Else

    MsgBox "Please open assembly"

Ende, wenn

Ende Sub

Sub TraverseComponent(comp As 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() & ")"

" Ouvre le fichier de la boucle

ext = Rechts(swChildComp.GetPathName(), 6)

'si c'est un part
Wenn ext = « sldprt » Dann
'Debug.Print "Teil" & swChildComp.GetPathName()

'swApp.OpenDoc6 "C:\VueLocalePDM\PDM\2-CREE\01-Bibliotheque\Pièces\Pièces 06\DOC-000024428.sldprt", 1, 0, "", 0, 0

swApp.OpenDoc6 swChildComp.GetPathName(), 1, 0, «  », 0, 0

Oder
'ce n'est pas un prt"
If ext = « sldasm » Dann

'////aSM
Set Part = swApp.OpenDoc6(swChildComp.GetPathName(), 2, 0, «  », longstatus, longwarnings) '2 pou swDocASSEMBLY

Else
MsgBox "pas d'extension trouvée"
End If

Ende, wenn

MsgBox "avant fermeture du fichier"

''ferme le fichier de la boucle

'swApp.CloseDoc Teil.GetPathName

Set Part = Nichts

Next

Ende Sub

Bei mir ist dein Teil bereits offen (in der Baugruppe), also kein opendoc6 sondern eher aktiviertoc3 (um das bereits offene Teil aktiv zu machen):

swApp.ActivateDoc3(sOutputFolder & ".sldprt", False, swRebuildOnActivation_e.swUserDecision, Errors)

https://help.solidworks.com/2023/English/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.ISldWorks~ActivateDoc3.html

1 „Gefällt mir“

:rofl::rofl: :rofl:
… Wo die Grenzen der maschinellen Übersetzung liegen!

Fin du Sous Marin < = > End Sub
1 „Gefällt mir“

Diese maschinelle Übersetzung (Bing) für den Code ist in der Tat eine Katastrophe!

Es ist unmöglich, einen ausreichend langen Code ohne Übersetzungsprobleme zu posten, wenn Sie nicht das entsprechende Tag (vorformatiertes Text-Tag) verwenden:
image

@flaheurte darauf achten, den Code über diesen Tag zu posten, sonst wird end if zu end if und eine Vielzahl anderer mehr oder weniger amüsanter Fehler, sicherlich, was aber nicht hilft, den Code zu verstehen!

1 „Gefällt mir“

Ok, für mich hat das Opendoc es Ihnen ermöglicht, es in einem separaten Fenster zu haben.
Ich bestätige, dass activatedoc3 die Arbeit erledigt
Entschuldigung für den vorformatierten Text.

und Danke!

1 „Gefällt mir“

=> Sei nicht traurig, wenn es lustig ist! :grin:

1 „Gefällt mir“