| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| | |
 | SIEMENS PLM CONNECTION 2026 | 22. - 24. Juni 2026 | Lufthansa Konferenzzentrum Seeheim |
| | |
 | CATIA V5Power‘By: Der einfache Wechsel von dateibasierter zu objektbasierter Konstruktion., ein Webinar am 28.05.2026
|
|
Autor
|
Thema: API BOM auf Zeichnung Teil Benutzereigenschaft lesen (221 / mal gelesen)
|
brainer Mitglied Konstrukteur

 Beiträge: 63 Registriert: 25.09.2013
|
erstellt am: 04. Mai. 2026 15:00 <-- editieren / zitieren --> Unities abgeben:         
Hallo API Spezialisten, ich auf einer Zeichnung eine Stückliste mit Teilen. Wenn ich auf eine Spalte klicke und rechte Maustaste drücke kann ich das Teil direkt öffnen also quasi drauf zugreifen. Ich bin dabei ein Programm zu schreiben welches eine Stückliste auf der Zeichnung ausliest und in eine Excelliste schreibt. Da ich einen altdatenbestand habe kommt es vor das ich noch zusätzliche Infos aus den Benutzereigenschaften des Teils benötige die auf der Stückliste nicht vorhanden sind. Daher würde ich gerne über die Stüli das Teil im Hintergrund öffnen Benutzereigenschaft auslesen dann weiter in nächste Zeile usw. Ich kriege einfach nicht den Zugriff auf das Objekt durch die BOM table, hier ist immer Objekt Nothing Set swComp = swBomTable.GetComponent2(i, 0) i ist der Zähler durch Tabellen zeilen. Hat jemand eine Idee oder geht das garnicht. Danke schon mal Gruß Rainer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
riesi Mitglied CAD-Admin
   
 Beiträge: 1119 Registriert: 06.05.2002 SWX Premium 2023-Sp5
|
erstellt am: 04. Mai. 2026 15:21 <-- editieren / zitieren --> Unities abgeben:          Nur für brainer
Die Methode GetComponent2 gibt es zumindest in SolidWorks 2023 nicht. Welche Methode meinst Du genau? Wenn Du GetComponents2 aus BomTableAnnotation meintest, dann soll als zweiter Parameter die Konfiguration angeben werden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
brainer Mitglied Konstrukteur

 Beiträge: 63 Registriert: 25.09.2013
|
erstellt am: 04. Mai. 2026 15:56 <-- editieren / zitieren --> Unities abgeben:         
Ja ich meine GetComponents2 aus BomTableAnnotation. ich arbeite derzeit in SWX  2024 vielleicht ist das das Problem. Ich habe eine Stückliste mit Einzug Detaillierte Nummerierung (Unterbaugruppen Nummerierung 10, 10.10, 10.20, 20 etc) als nicht alle Teile auf einer "Ebene" Die Bom auf der Zeichnung auslesen als solches kein Problem nur von da auf das Teil kommen krieg ich nicht hin. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Holger.S Mitglied Konstrukteur
  
 Beiträge: 554 Registriert: 01.10.2004 Solidworks Professional 2021 SP5.1 Solidworks PDM Lenovo Thinkpad Microsoft Windows10 Pro Intel(R) Core(TM) i9-10885H CPU @ 2.40GHz 32 GB RAM NVIDIA Quadro RTX 3000
|
erstellt am: 05. Mai. 2026 07:43 <-- editieren / zitieren --> Unities abgeben:          Nur für brainer
Ich handhabe das wie folgt. Die Stückliste auf der Zeichnung besteht aus 17 Spalten von denen nur 8 angezeigt werden 9 sind ausgeblendet. Die Stückliste wird dann mit allen Spalten zur Weiterverarbeitung mit dem "SWXHelper" > "SWXHelper" in eine Exceldatei ausgelesen. Ich habe dann alle Stammdaten im Excel. Beim SWXHelper gibt es zahlreiche Einstellmöglichkeiten wie die Excel aussehen soll. ------------------ "Wir ertrinken in Informationen, aber wir hungern nach Wissen..." John Naisbitt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
brainer Mitglied Konstrukteur

 Beiträge: 63 Registriert: 25.09.2013
|
erstellt am: 05. Mai. 2026 08:16 <-- editieren / zitieren --> Unities abgeben:         
ja das kenn ich das Tool ist echt klasse. Mir geht es aber darum, gibt es eine Methode von der ich über die Stückliste direkt auf die Eigenschaften eines Teils zugreifen kann oder muß ich wenn ich das Teil herausgefunden habe das Teil im Hintergrund öffnen Eigenschaften, lesen , schließen usw. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Holger.S Mitglied Konstrukteur
  
 Beiträge: 554 Registriert: 01.10.2004 Solidworks Professional 2021 SP5.1 Solidworks PDM Lenovo Thinkpad Microsoft Windows10 Pro Intel(R) Core(TM) i9-10885H CPU @ 2.40GHz 32 GB RAM NVIDIA Quadro RTX 3000
|
erstellt am: 05. Mai. 2026 08:41 <-- editieren / zitieren --> Unities abgeben:          Nur für brainer
Natürlich, so wird doch eine Stückliste erzeugt, In der Tabelle die Spalte anklicken, Spalteneigenschaften wählen und dann die gewünschte Eigenschaft hinterlegen. ------------------ "Wir ertrinken in Informationen, aber wir hungern nach Wissen..." John Naisbitt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
brainer Mitglied Konstrukteur

 Beiträge: 63 Registriert: 25.09.2013
|
erstellt am: 05. Mai. 2026 12:03 <-- editieren / zitieren --> Unities abgeben:         
ist schon klar aber wie greife ich von der Stüli auf das Teil zu ohne es im Hintergrund separat zu öffnen. Den Teile Name und Pfad krieg ich raus hier gibt es auch ein Beispiel in SWX Get Components in Each BOM Table Row Example (VBA). aber hier die Frage ob es sowas wie CustomPropertyManager gibt da die Stüli ja auch auf die Eigenschaften der Teile zugreifen kann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
     
 Beiträge: 3445 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 05. Mai. 2026 12:55 <-- editieren / zitieren --> Unities abgeben:          Nur für brainer
Zitat: Original erstellt von brainer: ... wie greife ich von der Stüli auf das Teil zu ohne es im Hintergrund separat zu öffnen. Den Teile Name und Pfad krieg ich raus ...
Hallo Rainer, wenn das Teil auf der Zeichnung ist, hat SolidWorks das ja vermutlich im Hintergrund bereits geöffnet und dadurch Zugriff auf die Properties da drin. Ein regelrechtes Öffnen ist deshalb vermutlich nicht notwendig, evtl auch, wenn du den Befehl zum Öffnen benutzt. Ansonsten gibt es noch den Documentmanager. Mit dem kommst du an die Properties ohne öffnen - benötigt aber einen Lizenzschlüssel den man bei jedem SWX-Update erneuern muss (nicht für Zugriff auf alte Versionen, nur damit das Makro im neuen SWX wieder läuft). Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
brainer Mitglied Konstrukteur

 Beiträge: 63 Registriert: 25.09.2013
|
erstellt am: 05. Mai. 2026 16:14 <-- editieren / zitieren --> Unities abgeben:         
so mit ein bischen KI support hier mal ein code Sub ReadBOMCustomProperties() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDraw As SldWorks.DrawingDoc Dim swView As SldWorks.View Dim swBOM As SldWorks.BomTableAnnotation Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc If swModel Is Nothing Then MsgBox "Kein Dokument geöffnet" Exit Sub End If If swModel.GetType <> swDocDRAWING Then MsgBox "Bitte eine Zeichnung mit BOM öffnen" Exit Sub End If Set swDraw = swModel Set swView = swDraw.GetFirstView Set swView = swView.GetNextView ' erste echte Ansicht ' BOM holen (erste gefundene) Dim swTableAnn As SldWorks.TableAnnotation Set swTableAnn = swView.GetFirstTableAnnotation Do While Not swTableAnn Is Nothing If swTableAnn.Type = swTableAnnotation_BillOfMaterials Then Set swBOM = swTableAnn Exit Do End If Set swTableAnn = swTableAnn.GetNext Loop If swBOM Is Nothing Then MsgBox "Keine BOM gefunden" Exit Sub End If Dim rowCount As Long rowCount = swBOM.RowCount Dim i As Long For i = 1 To rowCount - 1 ' 0 ist Header Dim vCompArr As Variant vCompArr = swBOM.GetComponents2(i, "") If Not IsEmpty(vCompArr) Then Dim j As Long For j = 0 To UBound(vCompArr) Dim swComp As SldWorks.Component2 Set swComp = vCompArr(j) Dim swCompModel As SldWorks.ModelDoc2 Set swCompModel = swComp.GetModelDoc2 If swCompModel Is Nothing Then Debug.Print "Komponente nicht geladen" GoTo NextComponent End If ' CustomPropertyManager holen (Konfiguration!) Dim swCustPropMgr As SldWorks.CustomPropertyManager Set swCustPropMgr = swCompModel.Extension.CustomPropertyManager(swComp.ReferencedConfiguration) ' Property lesen Dim valOut As String Dim resolvedValOut As String Dim wasResolved As Boolean wasResolved = swCustPropMgr.Get4("Beschreibung", False, valOut, resolvedValOut) Debug.Print "------------------------" Debug.Print "Komponente: " & swComp.Name2 Debug.Print "Konfiguration: " & swComp.ReferencedConfiguration Debug.Print "Beschreibung (raw): " & valOut Debug.Print "Beschreibung (resolved): " & resolvedValOut NextComponent: Next j End If Next i MsgBox "Fertig! Siehe Direktfenster (Strg+G)" End Sub ein bischen anpassen und man kann es gebrauchen Danke an alle für die Antworten VG Rainer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |