Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  SolidWorks Komponentenbeschreibung mittels VBA ausgeben

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: SOLIDWORKS - DFMXpress
Autor Thema:   SolidWorks Komponentenbeschreibung mittels VBA ausgeben (593 mal gelesen)
philsg
Mitglied


Sehen Sie sich das Profil von philsg an!   Senden Sie eine Private Message an philsg  Schreiben Sie einen Gästebucheintrag für philsg

Beiträge: 9
Registriert: 20.10.2020

erstellt am: 20. Okt. 2020 15:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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; DPS Software GmbH


Sehen Sie sich das Profil von RBE an!   Senden Sie eine Private Message an RBE  Schreiben Sie einen Gästebucheintrag für RBE

Beiträge: 246
Registriert: 11.02.2002

HP ZBook 17 G5
Core i9 2.9GHz
32GB RAM
Quadro P4200
Win10 x64
SolidWorks2021 SP1

erstellt am: 20. Okt. 2020 16:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für philsg 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von philsg an!   Senden Sie eine Private Message an philsg  Schreiben Sie einen Gästebucheintrag für philsg

Beiträge: 9
Registriert: 20.10.2020

erstellt am: 21. Okt. 2020 08:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1346
Registriert: 24.07.2002

AutoCAD ACA 2019
Solidworks 2019 Sp3
Enterprise PDM 2019 Sp3
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für philsg 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von philsg an!   Senden Sie eine Private Message an philsg  Schreiben Sie einen Gästebucheintrag für philsg

Beiträge: 9
Registriert: 20.10.2020

erstellt am: 21. Okt. 2020 09:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 715
Registriert: 18.05.2005

SolidWorks 2020 x64 SP3.0
Dell Precision 5820
Intel Xeon W-2125 4x4GHz
NVIDIA Quadro P2000 5GB
32GB RAM
2x Dell U2412M, 24" TFT
Windows 10 Enterprise x64 1703
Microsoft Office 365 ProPlus
Microsoft Visual Studio Enterprise 2019

erstellt am: 21. Okt. 2020 09:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für philsg 10 Unities + Antwort hilfreich

Hallo Phil

Die Variablen ValOut, ResolvedValOut und WasResolved sind als ByRef deklariert.
Das heisst, wenn du der Funktion Variablen als Argumente übergibst, diese nach dem Ausführen den besagten Wert enthalten.

Schau dazu einmal das Beispiel Get Custom Properties for Configuration Example (VBA) an.

Gruss Andreas

------------------
21 ist nur die halbe Antwort.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

philsg
Mitglied


Sehen Sie sich das Profil von philsg an!   Senden Sie eine Private Message an philsg  Schreiben Sie einen Gästebucheintrag für philsg

Beiträge: 9
Registriert: 20.10.2020

erstellt am: 21. Okt. 2020 10:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 Explicit

Dim 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


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 715
Registriert: 18.05.2005

SolidWorks 2020 x64 SP3.0
Dell Precision 5820
Intel Xeon W-2125 4x4GHz
NVIDIA Quadro P2000 5GB
32GB RAM
2x Dell U2412M, 24" TFT
Windows 10 Enterprise x64 1703
Microsoft Office 365 ProPlus
Microsoft Visual Studio Enterprise 2019

erstellt am: 22. Okt. 2020 12:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für philsg 10 Unities + Antwort hilfreich

Habe den Code einmal angepasst, damit er ohne Fehler durchläuft.
Code:
Option Explicit

Dim 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


Sehen Sie sich das Profil von philsg an!   Senden Sie eine Private Message an philsg  Schreiben Sie einen Gästebucheintrag für philsg

Beiträge: 9
Registriert: 20.10.2020

erstellt am: 26. Okt. 2020 13:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Anmerkung2020-10-28075921.jpg


Kolbenstange1.jpg


Kolbenstange2.jpg

 
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


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 715
Registriert: 18.05.2005

SolidWorks 2020 x64 SP3.0
Dell Precision 5820
Intel Xeon W-2125 4x4GHz
NVIDIA Quadro P2000 5GB
32GB RAM
2x Dell U2412M, 24" TFT
Windows 10 Enterprise x64 1703
Microsoft Office 365 ProPlus
Microsoft Visual Studio Enterprise 2019

erstellt am: 29. Okt. 2020 10:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für philsg 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von philsg an!   Senden Sie eine Private Message an philsg  Schreiben Sie einen Gästebucheintrag für philsg

Beiträge: 9
Registriert: 20.10.2020

erstellt am: 03. Nov. 2020 14:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi,

vielen Dank für die Hilfe. Es rennt nun wie gewünscht

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz