Makro vba do eksportowania niestandardowych właściwości zespołu i jego elementów podrzędnych

Witam

Chciałbym utworzyć makro do eksportowania niektórych niestandardowych właściwości złożenia, które jest już otwarte w solidworks, ale także wszystkich tych elementów podrzędnych.

Stworzyłem już makro, które wyciąga niestandardowe właściwości zespołu lub części i zapisuje je w programie Excel. (wszystko działa dobrze)

Mój problem jest bardzo prosty. Nie mogę otworzyć części od czasu montażu.
Widzę, że jest to zestaw, mogę przejść przez drzewo i znaleźć pełną ścieżkę wszystkich dzieci, ale nie mogę otworzyć każdego dziecka, aby wyodrębnić właściwości niestandardowe...
Jeśli masz pomysł, jestem za tym.
Poniżej znajduje się mój kod bez części odzyskiwania właściwości niestandardowych, ponieważ to nie jest problem.
Jeśli się mylę, wiersz " swApp.OpenDoc6 swChildComp.GetPathName(), 1, 0, "", 0, 0 " powinien otworzyć potomki.
Debug print " Debug.Print indent & swChildComp.Name2 & " (" & swChildComp.GetPathName() & " ) " daje mi drogę do dzieci, o których mowa.

Texte préformaté’**********************
"Prawa autorskie(C) 2023 Xarial Pty Limited
'Odniesienie: Przechodzenie przez drzewo komponentów za pomocą API SOLIDWORKS
'Licencja: Licencja
'**********************
Opcja jawna
Dim swApp jako SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Przyciemnij część jako SldWorks.ModelDoc2
Dim SelMgr As SldWorks.SelectionMgr
Dim swFeatMgr As SldWorks.FeatureManager
Dim path_complete As String 'chemin complet de la pièce
Dim myError tak długo
Przyciemnij myWarning tak długo

Dim guillemet Jako Struna
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Dim ext As Ciąg
Const INDENT_SYMBOL As String = " "

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"

Zakończ jeżeli:

Koniec subwoofera

Sub TraverseComponent(comp As SldWorks.Component2, wcięcie jako ciąg)

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

'si c'est un part
Jeśli ext = « sldprt » Wtedy
'Debug.Print "Część " & 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

Inaczej
"Ce n'est pas un prt"
Jeśli ext = « sldasm » Wtedy

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

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

Zakończ jeżeli:

MsgBox "avant fermeture du fichier"

''ferme le fichier de la boucle

'swApp.CloseDoc Nazwa_części.GetPathName

Ustaw część = Nic

Next

Koniec subwoofera

Dla mnie twoja część jest już otwarta (w montażu), więc nie opendoc6, ale raczej aktywowanyoc3 (aby już otwarta część była aktywna):

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 polubienie

:rofl::rofl: :rofl:
… Gdzie granic tłumaczenia maszynowego!

Fin du Sous Marin < = > End Sub
1 polubienie

To tłumaczenie maszynowe (Bing) dla kodu to rzeczywiście katastrofa!

Nie można opublikować wystarczająco długiego kodu bez problemów z tłumaczeniem, jeśli nie używasz odpowiedniego tagu (wstępnie sformatowanego znacznika tekstowego):
image

@flaheurte być ostrożnym, aby opublikować kod za pomocą tego tagu, w przeciwnym razie skończy się, jeśli stanie się końcem, jeśli i mnóstwo innych błędów mniej lub bardziej zabawnych, na pewno, ale które nie pomagają w zrozumieniu kodu!

1 polubienie

Ok, dla mnie opendoc pozwolił ci mieć go w osobnym oknie.
Potwierdzam, że activatedoc3 spełnia swoje zadanie
Przepraszamy za wstępnie sformatowany tekst.

i Dziękujemy!

1 polubienie

=> Nie przepraszaj, gdy jest śmiesznie! :grin:

1 polubienie