Macro vba om aangepaste eigenschappen van een assembly en zijn kinderen te exporteren

Hallo

Ik wil graag een macro maken om enkele aangepaste eigenschappen te exporteren van een assembly die al open staat in solidworks, maar ook van al deze kinderen.

Ik heb al een macro gemaakt die de aangepaste eigenschappen van een assembly of een onderdeel eruit haalt en deze opslaat in een excel. (alles werkt goed)

Mijn probleem is heel simpel. Ik kan de onderdelen niet openen sinds de montage.
Ik kan zien dat het een vergadering is, ik kan door de boom gaan en het volledige pad van alle kinderen vinden, maar ik kan niet elk kind openen om de aangepaste eigenschappen te extraheren...
Als je een idee hebt, ben ik er helemaal voor.
Hieronder staat mijn code zonder het herstelgedeelte voor aangepaste eigenschappen, want dat is het probleem niet.
De regel " swApp.OpenDoc6 swChildComp.GetPathName(), 1, 0, "", 0, 0 " zou de kinderen moeten openen als ik me vergis.
De debug print " Debug.Print indent & swChildComp.Name2 & " (" & swChildComp.GetPathName() & " ) " geeft me de weg naar de kinderen in kwestie.

Texte préformaté’**********************
'Auteursrecht(C) 2023 Xarial Pty Limited
'Referentie: De componentenboom doorkruisen met behulp van de SOLIDWORKS API
"Licentie: Licentie
'**********************
Optie Expliciete
Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Dim deel als SldWorks.ModelDoc2
Dim SelMgr Als SldWorks.SelectionMgr
Dim swFeatMgr als SldWorks.FeatureManager
Dim path_complete As String 'chemin complet de la pièce
Dim myError zo lang mogelijk
Dim myWarning zo lang

Dim guillemet als snaar
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long

Dim ext als snaar
Const INDENT_SYMBOL As String = " "

Sub hoofd()

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"

Einde als

Einde Sub

Sub TraverseComponent(comp als SldWorks.Component2, inspringen als tekenreeks)

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 = Recht(swChildComp.GetPathName(), 6)

'si c'est un part
Als ext = « sldprt » Dan
'Debug.Print "Part " & 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

Anders
'ce n'est pas un prt'
Als ext = « sldasm » Dan

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

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

Einde als

MsgBox "avant fermeture du fichier"

''ferme le fichier de la boucle

'swApp.CloseDoc Part.GetPathName

Set Deel = Niets

Next

Einde Sub

Voor mij is je deel al open (in de assembly) dus geen opendoc6 maar eerder geactiveerdoc3 (om het al open deel actief te maken):

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 like

:rofl::rofl: :rofl:
… Waar de grenzen van machinevertaling!

Fin du Sous Marin < = > End Sub
1 like

Deze machinevertaling (Bing) voor de code is inderdaad een ramp!

Het is onmogelijk om een code te posten die lang genoeg is zonder vertaalproblemen als u niet de juiste tag gebruikt (vooraf geformatteerde teksttag):
image

@flaheurte voorzichtig zijn om de code te posten via deze tag anders einde als wordt einde als en veelheid van andere fouten min of meer amusant, zeker, maar die niet helpen om de code te begrijpen!

1 like

Ok voor mij stond de opendoc je toe om het in een apart venster te hebben.
Ik bevestig dat activatedoc3 zijn werk doet
Sorry voor de vooraf opgemaakte tekst.

en Bedankt!

1 like

=> Heb geen spijt als het grappig is! :grin:

1 like