Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Makro Blattregisterkarte löschen und Zeichnung speichern

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: 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


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

Beiträge: 13
Registriert: 24.10.2008

SolidWorks 2017 SP4
Windows 7

erstellt am: 02. Nov. 2020 14:01    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


Sheet_Tab_Popup_Delete.jpg

 

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



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

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 02. Nov. 2020 16:14    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 Andreas Wegener 10 Unities + Antwort hilfreich

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.ModelDocExtension

boolstatus = 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


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

Beiträge: 13
Registriert: 24.10.2008

SolidWorks 2017 SP4
Windows 7

erstellt am: 03. Nov. 2020 08:26    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

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



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

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 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 Andreas Wegener 10 Unities + Antwort hilfreich

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



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

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 03. Nov. 2020 12:44    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 Andreas Wegener 10 Unities + Antwort hilfreich

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 Boolean

Set 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


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

Beiträge: 13
Registriert: 24.10.2008

SolidWorks 2017 SP4
Windows 7

erstellt am: 04. Nov. 2020 07:45    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

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


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

Beiträge: 13
Registriert: 24.10.2008

SolidWorks 2017 SP4
Windows 7

erstellt am: 04. Nov. 2020 07:48    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

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 >>)

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)2024 CAD.de | Impressum | Datenschutz