| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
Autor
|
Thema: Block speichern per Makro (299 mal gelesen)
|
mechanikuss Mitglied Konstruktion Anlagen+Werkzeug+Maschinen

 Beiträge: 97 Registriert: 04.06.2002 MS-Windows 10 Pro MS-Office Pro Plus 2019 DS-Solidworks 2019 Pro
|
erstellt am: 20. Dez. 2022 12:48 <-- editieren / zitieren --> Unities abgeben:         
Hallo Gemeinde, Mal wieder eine Frage zum Skizzenblock. Zur zügigen Erstellung einer Block-Bibliothek möchte ich ausgewählte Block-Instanzen per Makro in eine Datei speichern. Hintergrund ist, dass ich nach Auswahl der Block-Instanz den Ordnerpfad mit Dateiname per Klick gleich mitgeben möchte. Die Identifikation der Blockinstanz und auslesen des Dateinamens aus dem Attribut funktioniert bereits. Nur fürs "Block speichern" per VBA habe ich bisher keinen sachdienlichen Hinweis gefunden. Danke im Voraus für eure Hilfe. ------------------ Lieber Gruß vom mechanikuss 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: 2998 Registriert: 04.04.2001 SWX2021sp5 WIN10 proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19) CSWP 12/2015
|
erstellt am: 21. Dez. 2022 00:41 <-- editieren / zitieren --> Unities abgeben:          Nur für mechanikuss
Hi, wie ich es verstehe, ist in einer Block-Datei die Blockdefinition. Die Instanzen sind dann die Platzierungen des Blocks / der Blöcke auf der Zeichnung (kann auch mehrfach platziert werden). Wenn du jetzt mehrere Block Instanzen wählst - in was für einer Datei sollen die gespeichert werden? Ich glaub, du kannst die zusammenfassen, zu einem übergeordneten Block und den speichern als sldblk oder so (makesketchblockfromselected). Aber ich bin mir nicht sicher, ob es das ist, was du vorhast. Oder sollen die gewählten Instanzen in jeweils eine eigene Datei gespeichert werden? Dann musst du von der Instanz zur Definition gehen und die dann in eine Datei speichern. sketchblockdefinition.save Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mechanikuss Mitglied Konstruktion Anlagen+Werkzeug+Maschinen

 Beiträge: 97 Registriert: 04.06.2002 MS-Windows 10 Pro MS-Office Pro Plus 2019 DS-Solidworks 2019 Pro
|
erstellt am: 21. Dez. 2022 09:01 <-- editieren / zitieren --> Unities abgeben:         
Hallo Christian, Danke für deine Rückmeldung. Möglicherweise habe ich mich missverständlich ausgedrückt. Ich möchte nicht mehrere Instanzen auf einmal speichern, sondern nur die eine aktuell selektierte Instanz. Mir fehlt im Grunde nur ein Code, wie man per VBA "Block speichern" aufrufen kann. Gruß Fred ------------------ Lieber Gruß vom mechanikuss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1724 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 21. Dez. 2022 10:39 <-- editieren / zitieren --> Unities abgeben:          Nur für mechanikuss
|
mechanikuss Mitglied Konstruktion Anlagen+Werkzeug+Maschinen

 Beiträge: 97 Registriert: 04.06.2002 MS-Windows 10 Pro MS-Office Pro Plus 2019 DS-Solidworks 2019 Pro
|
erstellt am: 21. Dez. 2022 10:48 <-- editieren / zitieren --> Unities abgeben:         
Hallo Heinz, das ist nicht ganz richtig. Du speicherst Blöcke immer auf Basis einer selektierten Instanz auf der Zeichnung. Wie soll das sonst gehen? Außerdem war das nicht meine Frage. Ich möchte lediglich das was schon per Menü-Befehl manuell funktioniert nun per Makro automatisieren. Gruß Fred ------------------ Lieber Gruß vom mechanikuss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1724 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 21. Dez. 2022 12:38 <-- editieren / zitieren --> Unities abgeben:          Nur für mechanikuss
Hallo Fred, Du hast gefragt, wie man per VBA, Blöcke speichern kann. Speichern von Blöcken gibt es in VBA, zumindest lt. Online-Hilfe, nur über Blockdefinitionen. Manchmal braucht es eben etwas an Programmierung, das in VBA nachzubilden, was ein Menübefehl macht.
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mechanikuss Mitglied Konstruktion Anlagen+Werkzeug+Maschinen

 Beiträge: 97 Registriert: 04.06.2002 MS-Windows 10 Pro MS-Office Pro Plus 2019 DS-Solidworks 2019 Pro
|
erstellt am: 21. Dez. 2022 14:42 <-- editieren / zitieren --> Unities abgeben:         
Hallo Heinz, na dann... und weißt Du denn, wie man es macht? Zumindest gibt auch der Makro-Recorder nicht viel an Info her. Grüße Fredl ------------------ Lieber Gruß vom mechanikuss [Diese Nachricht wurde von mechanikuss am 21. Dez. 2022 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1724 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 22. Dez. 2022 06:16 <-- editieren / zitieren --> Unities abgeben:          Nur für mechanikuss
Hallo Fred, ich könnte es mir so vorstellen - auslesen der Attributwerte aus der Blockdefinition - Werte zwischenspeichern - auslesen der Attribute aus der Blockinstanz - setzen der Attributwerte in der Blockdefinition - die Blockdefinition in eine Datei speichern - die zwischengespeicherten Werte wieder in der Blockdefinition setzen ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mechanikuss Mitglied Konstruktion Anlagen+Werkzeug+Maschinen

 Beiträge: 97 Registriert: 04.06.2002 MS-Windows 10 Pro MS-Office Pro Plus 2019 DS-Solidworks 2019 Pro
|
erstellt am: 22. Dez. 2022 08:56 <-- editieren / zitieren --> Unities abgeben:         
Hallo Heinz, Danke für die Mühen - echt lieb von Dir. Und es wurde nun auch geklärt, dass wir die Block-Definition in die Datei speichern, nicht die Instanz. Meine eigentliche Frage ist viel banaler, als es aussieht. Mir fehlt nur die eine Zeile VBA-Code zum "Block speichern" Alle anderen Schritte laufen bereits. Der Zweck meines Tools ist lediglich, einen bestehenden Block mit derselben Geometrie (Definition) aber mit geänderter Attribut-Ausprägung als neue Datei in einen festgelegten Ordner abzuspeichern. Der Ablauf ist wie folgt: 1. Einen bereits vorbereiteten und eingefügten Block auf der Zeichnung selektieren und Makro starten 2. Nun öffnet ein Formular und die Attributs-Werte können geändert werden (Teilenummer, Benennung, usw.) 3. Mit Button(1) werden die neuen Werte in die aktuell selektierte Block-Instanz geschrieben 4. Mit Button(2) können die neuen Werte auch in eine andere per Selektion ausgewählte Instanz übertragen werden 5. Mit Button(4) wird das Formular geschlossen und das Makro beendet 6. Mit Button(3) soll nun diese Block-Definition aber mit den veränderten Attribut-Werten in eine Datei gespeichert werden - Dateiname = Teilenummer_Label - Ablageort = Target Path Aktuell wird mit Button(3) behelfsmäßig der Speicherpfad+Dateiname in die Zwischenablage gelegt und das Formular geschlossen. Danach muss ich nun den Befehl: "Block speichern" manuell über Menü oder Shortkey ausführen, den kopierten Pfad einfügen und speichern. Und genau das hätte ich gern auch noch per VB-Code automatisiert - wenn das so einfach geht?! Ich hoffe, das ist nun so verständlicher. Das Formular findet Ihr im Anhang. Gruß Fred ------------------ Lieber Gruß vom mechanikuss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1724 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 22. Dez. 2022 11:14 <-- editieren / zitieren --> Unities abgeben:          Nur für mechanikuss
Hallo Fred, also wenn es nur die Zeile ist um die Blockdefinition zu speichern Wenn Du das Objekt der Blockdefinition hast z.B.: BlockDef dann ist das einfach BlockDef.Save(Pfad+DateiName) Nur wird Dir das, wahrscheinlich, nicht weiterhelfen, weil zuerst der Textwert in der Blockdefinition geändert werden muss. anbei ein kleines Makro, was das erledigt '******************************************************** Const Attribut1 = "Eingabe"
Sub main() Dim swApp As SldWorks.SldWorks Dim swMod As ModelDoc2 Dim selmgr As SelectionMgr Dim BlIns As SketchBlockInstance Dim BlDef As SketchBlockDefinition Dim attr01 As String Dim ob As SldWorks.Entity Dim swNote As Note Dim SkMgr As SketchManager Set swApp = Application.SldWorks Set swMod = swApp.ActiveDoc Set selmgr = swMod.SelectionManager 'Selektierte Blockinstanz Set BlIns = selmgr.GetSelectedObject6(1, 0) 'Auslesen des Attributwerts attr01 = BlIns.GetAttributeValue(Attribut1) 'Die Blockdefinition holen Set BlDef = BlIns.Definition Set SkMgr = swMod.SketchManager 'Die Blockdefinition bearbeiten SkMgr.EditSketchBlock 'Alle Texte in der Definition durchlaufen For i = 0 To BlDef.GetNoteCount - 1 Set swNote = BlDef.GetNotes(i) 'Wenn das Attribut gefunden wurde If swNote.TagName = Attribut1 Then 'Den Attributwert setzen swNote.SetText attr01 Exit For End If Next i 'Bearbeitung Blockdefinition beenden SkMgr.EndEditSketchBlock (True) 'Blockdefinition sichern ok = BlDef.Save("C:\temp\" & attr01 & ".sldblk") End Sub '********************************************************
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mechanikuss Mitglied Konstruktion Anlagen+Werkzeug+Maschinen

 Beiträge: 97 Registriert: 04.06.2002 MS-Windows 10 Pro MS-Office Pro Plus 2019 DS-Solidworks 2019 Pro
|
erstellt am: 22. Dez. 2022 12:51 <-- editieren / zitieren --> Unities abgeben:         
Hallo Heinz, Funzt !!! Du bist spitze !!! Geht es also doch so einfach?! Ich war schon nah dran, aber mir haben noch diese Zeilen gefehlt: ************************************************** 'Deklaration Dim BlDef As SketchBlockDefinition 'Die Blockdefinition holen Set BlDef = BlIns.Definition 'Blockdefinition sichern ok = BlDef.Save("C:\temp\" & attr01 & ".sldblk") ************************************************** Alles andere war schon da  Vielen herzlichen Dank für deine Geduld, Mühe und Lösung. Ich wünsche Dir und der ganzen Gemeinde hier schöne Feiertage und einen guten Rutsch. Fred ------------------ Lieber Gruß vom mechanikuss 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: 2998 Registriert: 04.04.2001 SWX2021sp5 WIN10 proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19) CSWP 12/2015
|
erstellt am: 22. Dez. 2022 18:29 <-- editieren / zitieren --> Unities abgeben:          Nur für mechanikuss
|