| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| 3DEXPERIENCE Conference 2024 | München, eine Veranstaltung am 17.10.2024
|
Autor
|
Thema: SolidWorks Komponentenbeschreibung mittels VBA ausgeben (2044 / mal gelesen)
|
philsg Mitglied
Beiträge: 9 Registriert: 20.10.2020
|
erstellt am: 20. Okt. 2020 15:16 <-- editieren / zitieren --> Unities abgeben:
Guten Tag zusammen , ich komme einfach nicht weiter mit meinem Problem. Ich möchte meine SW Baugruppe mittels Makro komplett durchlaufen und von jeder Komponente (Baugruppe inkl. Kinder und Bauteil) auf Grundlage der aktiven Konfiguration die Komponentenbezeichnung ausgeben lassen. Bezüglich dem kompletten Durchlaufen bin ich schon auf den Begriff "Traverse Assambly" gestoßen, nur fehlen mir noch die Befehle um die Komponentenbezeichnung auszulesen. Hoffe hier könnt ihr helfen. Vielen Dank schonmal im Voraus! Gruß Phil
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RBE Mitglied TechSupport; Bechtle PLM Deutschland GmbH
Beiträge: 294 Registriert: 11.02.2002 HP ZBook 17 G5 Core i9 2.9GHz 32GB RAM Quadro P4200 Win11 SolidWorks2024 SP3.1 (EV)
|
erstellt am: 20. Okt. 2020 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für philsg
Hi, hol Dir für jede Komponente mit CustomPropertyManager::Get5 die Eigenschaften und schau, ob die Eigenschaft dabei ist, die in den Optionen für die Beschreibung festgelegt ist (swApp.GetUserPreferenceStringValue(swUserPreferenceStringValue_e.swCustomPropertyUsedAsComponentDescription)). EDIT: das neuere CustomPropertyManager::Get6 geht natürlich auch. ------------------ Grüße, RBE ---------- [Diese Nachricht wurde von RBE am 20. Okt. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
philsg Mitglied
Beiträge: 9 Registriert: 20.10.2020
|
erstellt am: 21. Okt. 2020 08:20 <-- editieren / zitieren --> Unities abgeben:
Hi, danke für deine schnelle Antwort. Bei dem ::Get Befehl erhalte ich immer nur den return value als Ausgabe (bei mir halt "2" = "Resolved value was returned"). Wie komme ich an den eigentlichen value der Eigenschaft heran? --> Get5(FieldName, UseCached, ValOut, ResolvedValOut, WasResolved) Bin ich richtig in der Annahme, dass "ValOut", "ResolvedValOut" und "WasResolved" egal sind bei meinem Befehl, also auch "" sein können bzw. True oder False Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002 AutoCAD ACA 2019 Solidworks 2021 Sp5.1 Enterprise PDM 2021 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Dell Ultrasharp U2415 Dell M4800
|
erstellt am: 21. Okt. 2020 08:56 <-- editieren / zitieren --> Unities abgeben: Nur für philsg
Hi, ValOut ist der Wert bzw. die Formel die in den Dateieigenschaften steht. ResolvedValOut ist der evaluierte Wert wenn da eine Formel drin stehen sollte, sonst ist das der gleiche Text wie bei ValOut. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
philsg Mitglied
Beiträge: 9 Registriert: 20.10.2020
|
erstellt am: 21. Okt. 2020 09:00 <-- editieren / zitieren --> Unities abgeben:
hi, valout und und resolvedout machen für mich Sinn wenn ich Werte übergeben will, aber wenn ich diese Werte rausziehen möchte, was muss ich da in der Methode angeben? Get5("Identity_Number", False, ??, ??, WasResolved) [Diese Nachricht wurde von philsg am 21. Okt. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 817 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 21. Okt. 2020 09:21 <-- editieren / zitieren --> Unities abgeben: Nur für philsg
|
philsg Mitglied
Beiträge: 9 Registriert: 20.10.2020
|
erstellt am: 21. Okt. 2020 10:00 <-- editieren / zitieren --> Unities abgeben:
Hi, dein Beispiel habe ich versucht, aber als returnValue bekomme ich nun eine "1" Parallel habe ich mir folgenden Code zusammengesucht, bei dem die Einzelbestandteile "durchlaufen" der Assambly und Properties ausgeben funktionieren. Aber die Kombination macht noch nicht das was es soll. Code: Option ExplicitDim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swCustPropMgr As SldWorks.CustomPropertyManager Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc If Not swModel Is Nothing Then Dim swRootComp As SldWorks.Component2 Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent TraverseComponent swRootComp Else MsgBox "Es ist keine Baugruppe geöffnet. Vorgang abgebrochen!" End If End Sub
Sub TraverseComponent(comp As SldWorks.Component2) Dim vChildComps As Variant Dim swCompModel As SldWorks.ModelDoc2 Dim i As Integer Dim j As Integer Dim vNameArr As Variant Dim vName As Variant Dim aProperties() As Variant vChildComps = comp.GetChildren For i = 0 To UBound(vChildComps) Dim swChildComp As SldWorks.Component2 Set swChildComp = vChildComps(i) '''''''''''''' 'Set swApp = Application.SldWorks Set swCompModel = swApp.ActiveDoc Set swCustPropMgr = swCompModel.Extension.CustomPropertyManager("") '<---- Hier kommts zur Fehlermeldung. Ich möchte hier die Modell der Kinderkomponenten einlesen um aus diesen die Properties zu bekommen ' Get all custom properties and write to array aProperties vNameArr = swCustPropMgr.GetNames: If IsEmpty(vNameArr) Then Exit Sub ReDim aProperties(UBound(vNameArr), 1) j = 0 For Each vName In vNameArr 'Debug.Print swChildComp.Name2 & ": " Debug.Print swCustPropMgr.Get(vName) ' aProperties(i, 0) = vName ' aProperties(i, 1) = swCustPropMgr.Get(vName) j = j + 1 Next vName TraverseComponent swChildComp Next End Sub
Komme hier leider auch nicht weiter Bin für jeder Hilfe dankebar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 817 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 22. Okt. 2020 12:17 <-- editieren / zitieren --> Unities abgeben: Nur für philsg
Habe den Code einmal angepasst, damit er ohne Fehler durchläuft. Code: Option ExplicitDim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swCustPropMgr As SldWorks.CustomPropertyManager Dim swRootComp As SldWorks.Component2 Sub main() Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc If swModel Is Nothing Then GoTo Error If swModel.GetType = swDocASSEMBLY Then Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent TraverseComponent swRootComp Exit Sub End If Error: MsgBox "Es ist keine Baugruppe geöffnet. Vorgang abgebrochen!" End Sub Sub TraverseComponent(comp As SldWorks.Component2) Dim vChildComps As Variant Dim swCompModel As SldWorks.ModelDoc2 Dim i As Integer Dim j As Integer Dim vNameArr As Variant Dim vName As Variant Dim aProperties() As Variant vChildComps = comp.GetChildren For i = 0 To UBound(vChildComps) Dim swChildComp As SldWorks.Component2 Set swChildComp = vChildComps(i) 'Debug.Print swChildComp.GetPathName Set swCompModel = swChildComp.GetModelDoc2 If Not swCompModel Is Nothing Then If swCompModel.GetType = swDocPART Then Set swCustPropMgr = swCompModel.GetActiveConfiguration.CustomPropertyManager '("") '<---- Hier kommts zur Fehlermeldung. Ich möchte hier die Modell der Kinderkomponenten einlesen um aus diesen die Properties zu bekommen ' Get all custom properties and write to array aProperties vNameArr = swCustPropMgr.GetNames If Not IsEmpty(vNameArr) Then 'Exit Sub ReDim aProperties(UBound(vNameArr), 1) j = 0 For Each vName In vNameArr 'Debug.Print swChildComp.Name2 & ": " Debug.Print swCustPropMgr.Get(vName) ' aProperties(i, 0) = vName ' aProperties(i, 1) = swCustPropMgr.Get(vName) j = j + 1 Next vName End If Else TraverseComponent swChildComp 'für Unterbaugruppen End If End If Next End Sub
------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
philsg Mitglied
Beiträge: 9 Registriert: 20.10.2020
|
erstellt am: 26. Okt. 2020 13:58 <-- editieren / zitieren --> Unities abgeben:
Hallo HenryV, ich habe deine Anpassungen bei mir im Programm übernommen und es funktioniert wunderbar . Vielen Dank für die Hilfe @All --> Edit: Leider muss ich diese Aussage revidieren. Nach Prüfung an einer Baugruppe ist mir aufgefallen, dass das Script nicht die Eigenschaften der gewählten SolidWorks-Konfiguration auswertet. Diesen Umstand hatte ich das letzte Mal übersehen. Ich habe in einer Baugruppe zwei Kolbenstangen verbaut in unterschiedlichen Konfigurationen. Über den Debug Befehl lasse ich mir diese im Moment anzeigen: Code:
For Each vName In vNameArr If vName = "Identity_Number" Then Debug.Print swChildComp.Name2 & ": " swCustPropMgr.Get(vName) Next vName
Die Identity_Number ist in den "Dateieigenschaften"-> "Konfigurationsspezifisch" unterschiedlich. Dennoch erhalte ich beim Debug immer die selbe Identity_Number . Anbei drei Bilder zu Verdeutlichtung Danke euch! [Diese Nachricht wurde von philsg am 28. Okt. 2020 editiert.]
[Diese Nachricht wurde von philsg am 28. Okt. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 817 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 29. Okt. 2020 10:27 <-- editieren / zitieren --> Unities abgeben: Nur für philsg
Damit du die konfigurationsspezifischen Properties bekommst, änderst du die Zeile Zitat: Set swCustPropMgr = swCompModel.Extension.CustomPropertyManager("")
mit Code: Set swCustPropMgr = swCompModel.ConfigurationManager.ActiveConfiguration.CustomPropertyManager
------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
philsg Mitglied
Beiträge: 9 Registriert: 20.10.2020
|
erstellt am: 03. Nov. 2020 14:29 <-- editieren / zitieren --> Unities abgeben:
|