| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | FMB |
Autor
|
Thema: Makro für Baugruppen - Stücklistenoptionen (993 mal gelesen)
|
Brödlahans Mitglied
Beiträge: 94 Registriert: 23.05.2008 HP xw4600 WS, Intel Core Duo 1,98Ghz, 3 GB Ram, WIN XP, NVIDIA Quadro FX 1700, SW2008 SP5.0, Huppendorfer Bierkühlung
|
erstellt am: 13. Jul. 2020 11:19 <-- editieren / zitieren --> Unities abgeben:
Hallo WBF , ich stehe hier vor einem Problem, für das es bestimmt eine kluge Lösung gibt, auf die ich aber nicht komme. Eine ganze Anlage mit X Unterbaugruppen ist mit einer nicht korrekten Teilevorlage konstruiert. Der Kunde fordert eine Stückliste mit allen Einzelteilen, die wir über die ganz normale Stücklistenfunktion "nur Teile" auf der Gesamtzeichnung erzeugen wollten. Dabei fiel auf, dass in ALLEN Unterbaugruppen in den Konfigurationseigenschaften als Stücklistenoption "Ausblenden" statt "Anzeigen" bei den Kind Komponenten ausgewählt ist (siehe Bild). Da wir keinen Azubi haben, kann ich diese "Strafarbeit" nicht deligieren Dazu kommt, dass ich Makrounerfahren bin (für alle Unterbaugruppen wären es eigentlich die selbe "Klickreihenfolge" bei geöffneter Baugruppe...). Hat jemand eine Idee, wie ich das lösen kann? Danke im Voraus für eure Zeit, Gedanken und Vorschläge! Gruß Brödlahans ------------------ Chuck Norris kennt die Frau von Ted Mosby.
[Diese Nachricht wurde von Brödlahans am 13. Jul. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
u.clemens Mitglied Konstrukteur
Beiträge: 964 Registriert: 04.07.2000 engineer's law o cheap o fast o good check only two !
|
erstellt am: 13. Jul. 2020 12:25 <-- editieren / zitieren --> Unities abgeben: Nur für Brödlahans
du brauchst ein Makro, was dir alle Unterbaugruppen durchklappert, die Einstellung entsprechend verändert und dann speichert. Für "alle Unterbaugruppen durchklappert" findest du in der API-Hilfe unter dem Stichpunkt "Traverse Assembly" zahlreiche Beispiele Für "Einstellung entsprechend verändert" kannst du dieses Code-Schnipsel einbauen
Code: configNames = swModel.GetConfigurationNames For i = 0 To UBound(configNames) Set swConfig = swModel.GetConfigurationByName(configNames(i)) swConfig.ChildComponentDisplayInBOM = swChildComponentInBOMOption_e.swChildComponent_Show Next i
Naja und "dann speichert" ist trivial ...
------------------ mfg uc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brödlahans Mitglied
Beiträge: 94 Registriert: 23.05.2008
|
erstellt am: 13. Jul. 2020 12:49 <-- editieren / zitieren --> Unities abgeben:
Hallo UC vielen Dank für deinen Antwort. Habe nun die "confignames" durch den Namen meiner Konfiguration (GS) ersetzt- habe es bei mehreren geöffneten BG´s probiert, erhielt zwar keine Fehlermeldung, aber es passierte auch nichts. Nach dem Traverse habe ich gesucht und ebenfalls gefunden, aber auch in niO getestet (wenn mein Schnipsel funktionieren würde, dann hätte ich doch das Ergebnis, dass SWX alle Unterbaugruppen der Hauptbaugruppe nacheinander öffnet, oder? Kannst du deine Hilfestellung noch mehr vereinfachen? Danke für deine Hilfe! Brödlahans
------------------ Chuck Norris kennt die Frau von Ted Mosby. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Spirou85 Mitglied Konstruktuer und CAD-Betreuer
Beiträge: 70 Registriert: 01.12.2014 HP ZBook 15 G5 Intel Xeon 2,9 GHz - 32GB Ram NVIDIA Quadro P2000M Windows 10 Pro 64Bit Version 1809 Build 17763.1098 SWX2020-64Bit-SP1.0 MaxxDB 2020 SP0.06 DraftSight Enterprise 2019 x64 SP3 3DCONNEXION SpaceMouse Enterprise mit CadMouse
|
erstellt am: 13. Jul. 2020 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für Brödlahans
Hallo Brödlahans nimm den Code hier, damit müsste es dann klappen. Code:
Option ExplicitSub Main() Dim swApp As SldWorks.SldWorks 'Zugriff auf SolidWorks Dim swDoc As SldWorks.ModelDoc2 'Zugriff auf das Aktive Dokument Dim swComp As SldWorks.Component2 'Zugriff auf Root-Komponente des Dokuments 'SolidWorks-Objekt erstellen und mit Aktivem Dokument verbinden Set swApp = Application.SldWorks Set swDoc = swApp.ActiveDoc 'Prüfen ob überhaupt ein Dokument offen, und ob es eine Baugruppe ist If swDoc Is Nothing Then Call MsgBox("Kein Dokument geöffnet somit Abbruch!", vbOKOnly, "Fehler !") Exit Sub End If If swDoc.GetType <> swDocASSEMBLY Then Call MsgBox("Keine Baugruppe aktiv, somit Abbruch!", vbOKOnly, "Fehler !") Exit Sub End If 'Rootkomponente der Baugruppe ermitteln Set swComp = swDoc.GetActiveConfiguration.GetRootComponent3(True) 'Baugruppe nach weiteren Komponenten durchforsten TraverseBG swComp, 1 End Sub Sub TraverseBG(oKomponente As Object, nEbene As Long) Dim vKind As Variant 'Array mit Kinkomponenten wird an Variantvariable übergeben Dim oKindKomp As Object 'Objekt mit der gerade untersuchten Kindkomponente Dim swAktModel As SldWorks.ModelDoc2 'Model das aus der Kindkomponente geholt wurde für Vollzugriff Dim sConfigNam As String 'Name der aktuellen Konfiguration der Geholten Kind-Komponente Dim nI As Long 'Zählvariable Dim nT As Long 'Zählvariable Dim nErrors As Long 'Fehlercoderückgabe Dim nWarnings As Long 'Warnungscoderückgabe Dim bRetVal As Boolean 'Rückgabewert Dim vConfignames As Variant 'Array um alle Konfigurationen durchzugehen Dim swConfig As SldWorks.Configuration 'Zugriff auf Konfiguration vKind = oKomponente.GetChildren 'Kinder der Routbaugruppe ermitteln For nI = 0 To UBound(vKind) 'Alle Kinder durchgehen Set oKindKomp = vKind(nI) 'Verknüpfung mit Kind-Komponente 'Prüfen ob Kind Unterdrückt If oKindKomp.GetSuppression2 <> swComponentSuppressed Then 'Hier nun Komponentenelemente an Variable übergeben sConfigNam = oKindKomp.ReferencedConfiguration 'Konfiguration ermitteln Set swAktModel = oKindKomp.GetModelDoc2() 'auf Kindkomponete als Modell zugreifen If Not swAktModel Is Nothing Then 'Prüfen Komponente Baugruppe ist If swAktModel.GetType = swDocASSEMBLY Then vConfignames = swAktModel.GetConfigurationNames For nT = 0 To UBound(vConfignames) Set swConfig = swAktModel.GetConfigurationByName(vConfignames(nT)) swConfig.ChildComponentDisplayInBOM = swChildComponentInBOMOption_e.swChildComponent_Show Next nT 'Aktuelles Modell speichern bRetVal = swAktModel.Save3(swSaveAsOptions_Silent, nErrors, nWarnings) End If 'Weitere Kinder in der Baugruppe durchsuchen TraverseBG oKindKomp, nEbene + 1 End If End If Next nI End Sub
Du brauchst nichts anpassen, Code nimmt sich alles selbst.
------------------ Viele Grüße aus Brackenheim Lars Pauly Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brödlahans Mitglied
Beiträge: 94 Registriert: 23.05.2008
|
erstellt am: 14. Jul. 2020 06:57 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|