| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Beyond SOLIDWORKS - Wie Dassault Systèmes Ihre Business-Hürden aus dem Weg räumt |
Autor
|
Thema: Makro Blattregisterkarte löschen und Zeichnung speichern (1231 / mal gelesen)
|
Andreas Wegener Mitglied Dipl.-Ing. Maschinenbau
Beiträge: 13 Registriert: 24.10.2008 SolidWorks 2017 SP4 Windows 7
|
erstellt am: 02. Nov. 2020 14:01 <-- editieren / zitieren --> Unities abgeben:
Liebe Forumsmitglieder, ich habe das Problem, dass ich mir das Leben ohne VBA-Kenntnisse mit dem ein oder anderen Makro etwas leichter machen möchte. Folgendes soll das Makro können: - Von einer in SWX geladenen Zeichnungsdatei sollen nacheinander die "Blätter" bzw. "Blattregisterkarten" aktiviert werden. - Bestimmte "Blattregisterkarten" sollen beim Durchlauf des Makros gelöscht werden. - Am Ende soll die Zeichnungsdatei gespeichert werden. Nachdem ich mir das Makro #5 aus der Sammlung von Stefan Berlitz (Vielen Dank an dieser Stelle!) als Vorlage genommen habe, funktioniert bereits ein Makro, welches nacheinander die Blattregisterkarten aktiviert. In der API-Hilfe habe ich den Befehl "swCommands_Sheet_Tab_Popup_Delete" (siehe Bild) gefunden, welcher meiner Meinung nach genau passend wäre. Allerdings weiß ich nicht, wie die genaue Syntax lautet, ihn anzuwenden. Im Deklarationsbereich sollte wohl zunächst mal "Dim instance As swCommands_e" stehen. Aber wie lautet im normalen Quelltext die Syntax zum Löschen mit diesem Befehl? Kann mir da jemand weiter helfen? Am Ende des Makros soll das aktive Zeichnungsdokument noch gespeichert werden. Hier habe ich in der API-Hilfe soviele in Betracht kommende Befehle gefunden, so dass ich komplett verwirrt bin. Also brauche in an dieser Stelle leider auch eure Hilfe. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 02. Nov. 2020 16:14 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Wegener
Hallo, die Holzhammer Methode mit der "RunCommand Method (ISldWorks)" würde ich nur in Ausnahmefällen verwenden wenn es wirklich keine dafür vorgesehene Methode gibt. Wenn du weist wie die Blätter heisen könntest du sie mit der "DeleteSelection2 Method (IModelDocExtension)" löschen. Code: Dim boolstatus As boolean Dim ModelDocExt As SldWorks.ModelDocExtensionboolstatus = ModelDocExt.SelectByID2("Namen_des_Blattes", "SHEET", 0, 0, 0, False, 0, Nothing, 0) boolstatus = ModelDocExt.DeleteSelection2(0)
Zum Speichern kannst du die "Save3 Method (IModelDoc2)" für das normale Speichern verwenden, wenn es unter neuem Namen oder als anderer Dokumenttyp z.B. PDF gespeichert werden soll kannst du die "SaveAs2 Method (IModelDocExtension)" verwenden. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Wegener Mitglied Dipl.-Ing. Maschinenbau
Beiträge: 13 Registriert: 24.10.2008 SolidWorks 2017 SP4 Windows 7
|
erstellt am: 03. Nov. 2020 08:26 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, danke für deine schnelle Antwort! Da ich die Namen der Blätter kenne, würde ich deine Methode gerne verwenden. Leider läuft es bei mir noch nicht. Ich habe den Quellcode an die Stellen gepackt, an denen es meiner Meinung nach ins in den Ablauf passt. Leider meldet sich immer der Debugger mit der Fehlermeldung: Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt. Den Code zum Löschen der Blätter habe ich an der Stelle eingefügt, an der dass Makro die Blätter nacheinander aktiviert:
Code:
For i = 1 To AnzahlBl MsgBox "Blatt" & i ' und wenn noch Blätter kommen dieses aktivieren If AnzahlBl > i Then If i = 2 Then MsgBox "Blatt" & i & " löschen" boolstatus = ModelDocExt.SelectByID2("Blatt2", "SHEET", 0, 0, 0, False, 0, Nothing, 0) HIER KOMMT FEHLERMELDUNG! boolstatus = ModelDocExt.DeleteSelection2(0) End If DrawingDoc.SheetNext End If Next i
Wo liegt hier noch mein Fehler? Gruß Andreas
[Diese Nachricht wurde von Andreas Wegener am 03. Nov. 2020 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 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: 03. Nov. 2020 12:27 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Wegener
Hallo Andreas, meiner Meinung nach, kann die Schleife so nicht funktionieren Du wählst immer "Blatt2" aus, das aber beim 1. Durchlauf gelöscht wird, also kannst Du beim 2. Durchlauf mit "Select..." nichts mehr finden Wenn Du nur Blätter mit dem Namen "Blatt2" löschen möchtest, dann brauchst Du die Schleife ja gar nicht. Sondern verwendest nur "ModelDocExt.SelectByID2("Blatt2",...." und fertig. Wenn Du aber mehrere Blätter löschen möchtest, solltest Du Dir eine Liste der Blattnamen erstellen und die in einer Schleife abarbeiten und selektieren Tipp beim ersten Durchlauf den Parameter "Append" von "SelectByID2" auf False und bei den nächsten Durchläufen auf True setzen Aber: erst nach dem Schleifenende löschen und nicht in der Schleife ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 03. Nov. 2020 12:44 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Wegener
Hallo Andreas, hast du die Variablen "boolstatus" bzw. "ModelDocExt" auch richtig dimensioniert bzw. ist ModelDocExt richtig gesetzt? Code: Dim swApp As SldWorks.SldWorks Dim sWModelDoc As SldWorks.ModelDoc2 Dim sWModelDocExt As SldWorks.ModelDocExtension Dim boolstatus As BooleanSet swApp = Application.SldWorks Set swModelDoc = swApp.ActiveDoc Set swModelDocExt = swModelDoc.Extension boolstatus = swModelDocExt.SelectByID2("Blatt2", "SHEET", 0, 0, 0, False, 0, Nothing, 0) boolstatus = swModelDocExt.DeleteSelection2(0)
Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Wegener Mitglied Dipl.-Ing. Maschinenbau
Beiträge: 13 Registriert: 24.10.2008 SolidWorks 2017 SP4 Windows 7
|
erstellt am: 04. Nov. 2020 07:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz, danke für deine Antwort. Zitat: Original erstellt von nahe: Hallo Andreas,meiner Meinung nach, kann die Schleife so nicht funktionieren Du wählst immer "Blatt2" aus, das aber beim 1. Durchlauf gelöscht wird, also kannst Du beim 2. Durchlauf mit "Select..." nichts mehr finden Wenn Du nur Blätter mit dem Namen "Blatt2" löschen möchtest, dann brauchst Du die Schleife ja gar nicht. Sondern verwendest nur "ModelDocExt.SelectByID2("Blatt2",...." und fertig.
Du hast recht, mit "ModelDocExt.SelectByID2("Blatt2",...." ich brauche die Schleife nicht. Sie ist noch ein Relikt vom Makro, welches nacheinander die Blätter aktiviert. Das Löschen hätte meiner Meinung nach schon in der Schleife funktionieren können, da der Löschen-Befehl in der zusätzlichen Abfrage steht, wenn i = 2 ist. Somit würde der Befehl auch nur einmal ausgeführt. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Wegener Mitglied Dipl.-Ing. Maschinenbau
Beiträge: 13 Registriert: 24.10.2008 SolidWorks 2017 SP4 Windows 7
|
erstellt am: 04. Nov. 2020 07:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, danke, nun hast du mir den kompletten Quellcode geliefert. Das Makro funktioniert nun genau wie ich es wollte. Echt toll, wie sich die Leute hier für Makro-Nieten wie mich bemühen. Schönen Tag und bleibt gesund! Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|