| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Planen Sie schon die Fertigung der nächsten Generation? |
Autor
|
Thema: Makro PDF Export mit Abfrage Datei bereits vorhanden (1301 mal gelesen)
|
MKZ23 Mitglied Maschinenbau
Beiträge: 6 Registriert: 21.10.2021 Solidworks 2021 SP4.1
|
erstellt am: 22. Okt. 2021 11:17 <-- editieren / zitieren --> Unities abgeben:
Hallo CAD-Gemeinde, wir benutzen ein, hier sehr bekanntes, Makro zum Export von PDF einer Zeichnung. Dieses Makro überschreibt die vorhandene Datei im Zielordner allerdings jedes Mal. Wir würden gerne abfragen, ob die Datei schon vorhanden ist und in diesem Fall ein Meldefenster ausgeben. Das Makro sieht folgendermaßen aus: Code: ' ****************************************************************************** ' C:\DOKUME~1\ast06\LOKALE~1\Temp\swx2140\Macro1.swb - macro recorded on 14/04/04 by Andreas Bacher ' ****************************************************************************** Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim FeatureData As Object Dim Feature As Object Dim Component As Object Dim saveFileName As String Sub main() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc swApp.ActiveDoc.ActiveView.FrameState = 1 swApp.ActiveDoc.ActiveView.FrameState = 1 Part.EditSketch If (swApp.ActiveDoc.GetPathName = "") Then 'Abfrage ob Name vergeben wurde MsgBox ("Bitte zuerst Zeichnung speichern!") Exit Sub End If saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".pdf" ' Speichern als PDF-Datei Part.SaveAs2 saveFileName, 0, True, False End Sub
Vor der Zeile "saveFileName =...." müsste die Abfrage stehen, ob die Datei im Zielverzeichnis existiert. Wenn vorhanden, dann MsgBox ("Datei bereits vorhanden - Datei wurde nicht gespeichert")
Ich sollte wohl noch erwähnen, dass im Zielordner Dateien mit dem gleichen Namen+Datum liegen. Beispiel: zu speichernde Datei: 12345678.pdf bereits im Zielordner vorhandene Datei: 12345678_TT.MM.JJJJ.pdf Das Aufzeichnen des Makros und Ausführen von "Speichern unter" (Part.SaveAs3), bringt leider auch nicht die gewohnte Windows-Meldung und Abfrage, ob die Datei im Zielverzeichnis überschrieben werden soll, sondern überspeichert diese ohne Meldung. Kann mir jemand verraten wie die Abfrage geschrieben werden muss? Am Liebsten so, dass ich mit Copy&paste zum Ziel komme Vielen Dank schonmal an alle VBA-Künstler MFGMKZ 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: 22. Okt. 2021 11:48 <-- editieren / zitieren --> Unities abgeben: Nur für MKZ23
|
riesi Mitglied CAD-Admin
Beiträge: 1073 Registriert: 06.05.2002 SWX Premium 2020-Sp5
|
erstellt am: 22. Okt. 2021 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für MKZ23
Zitat: Original erstellt von MKZ23:
Kann mir jemand verraten wie die Abfrage geschrieben werden muss? Am Liebsten so, dass ich mit Copy&paste zum Ziel komme
Für Copy&Paste liest Du Dir am besten die API-Hilfe durch, dort stehen dann auch entsprechende Beispiele, welche in Dein Makro kopiert werden können. Tipp von mir: Inzwischen soll das IModelDocExtension-Interface zum Speichern genutzt werden, dort kann bei SaveAs eingestellt werden, ob überschrieben werden soll oder nicht. Das "Ganze" Speichern als Funktion, so dass der Rückgabewert abgefragt werden kann und sich daraus eine Meldung ergibt.
[Diese Nachricht wurde von riesi am 22. Okt. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MKZ23 Mitglied Maschinenbau
Beiträge: 6 Registriert: 21.10.2021 Solidworks 2021 SP4.1
|
erstellt am: 22. Okt. 2021 15:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Gnahe, über dieses Bsp. bin ich auch schon gestolpert. Allerdings bin ich zu blöd das in das vorhandene Makro einzubauen. Ich bekomme die Abfrage nicht hin, dass er die vorhandene Datei im Ordner erkennt. Bin aber auch absoluter Laie im Thema VBA Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MKZ23 Mitglied Maschinenbau
Beiträge: 6 Registriert: 21.10.2021 Solidworks 2021 SP4.1
|
erstellt am: 22. Okt. 2021 16:05 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von riesi:
Für Copy&Paste liest Du Dir am besten die API-Hilfe durch, dort stehen dann auch entsprechende Beispiele, welche in Dein Makro kopiert werden können. Tipp von mir: Inzwischen soll das IModelDocExtension-Interface zum Speichern genutzt werden, dort kann bei SaveAs eingestellt werden, ob überschrieben werden soll oder nicht. Das "Ganze" Speichern als Funktion, so dass der Rückgabewert abgefragt werden kann und sich daraus eine Meldung ergibt.
Ich verstehe das Makro schon nicht und du kommst mir mit sowas um die Ecke
Ich wollte eigentlich vermeiden, dass ich mich tiefer in das Thema einlesen muss, da es "nur" um das Erweitern dieses einen Makros geht. Deshalb dachte ich, ich frage hier nach und lass die Experten ran. Trotzdem danke
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Olaf Wolfram Ehrenmitglied V.I.P. h.c. CAD-Mutti und Konstrukteur CSWP CSWI
Beiträge: 2431 Registriert: 30.06.2008 I7-3770 CPU 3,40 Ghz 32 Gb RAM 64 bit WIN 10 SWX 2019 SP5 NVIDIA Quadro K2000<P> Lenovo ThinkStation
|
erstellt am: 25. Okt. 2021 14:36 <-- editieren / zitieren --> Unities abgeben: Nur für MKZ23
|
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: 25. Okt. 2021 14:43 <-- editieren / zitieren --> Unities abgeben: Nur für MKZ23
Hallo, du kannst das Beispiel das Heinz dir gepostet hast doch teilweise übernehmen. Code: Dim strFileExists As StringstrFileExists = Dir(saveFileName) If strFileExists = "" Then Part.SaveAs2 saveFileName, 0, True, False Else MsgBox "Datei bereits vorhanden - Datei wurde nicht gespeichert" End If
Einfach die Zeile "Part.SaveAs2 saveFileName, 0, True, False" in deinem Macro durch den Code ersetzen. Hier wird dann die Datei nur gespeichert wenn sie noch nicht vorhanden ist. ------------------ --- 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 |
MKZ23 Mitglied Maschinenbau
Beiträge: 6 Registriert: 21.10.2021 Solidworks 2021 SP4.1
|
erstellt am: 26. Okt. 2021 07:00 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Olaf Wolfram: Nach der Reaktion stehen hier die geneigten Helfer sicherlich Schlange.....SCNR
Hallo Olaf, Ich hoffe die Reaktion fasst nicht jeder so auf wie du. Es war nämlich garnicht negativ gemeint. Lediglich dass ich zu doof bin und Hilfe brauche. Trotzdem danke für deinen Kommentar. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
riesi Mitglied CAD-Admin
Beiträge: 1073 Registriert: 06.05.2002 SWX Premium 2020-Sp5
|
erstellt am: 26. Okt. 2021 09:56 <-- editieren / zitieren --> Unities abgeben: Nur für MKZ23
Zitat: Original erstellt von MKZ23: ... ... wollte eigentlich vermeiden, dass ich mich tiefer in das Thema einlesen muss, ...
Und ich wollte vermeiden, dass ich mich tiefer mit dem "Debugging" fremder Makros beschäftigen muss. In diesem Falle habe ich, weder mein Arbeitgeber etwas von der gewünschten Funktion. Deswegen nur mein Verweis zur API-Hilfe, da dort reichlich Beispiele für viele Funktionen vorhanden sind. Wenn ich eine fertige Lösung für Deine Aufgabe auf meiner Festplatte gehabt hätte, Du hättest das Makro als Download bekommen. Zu Deinem Problem: Bei der Abfrage mit Dir musst Du ein Stenchen dazu geben, da Du sonst nicht die "änhlich" lautende Datei mit Datum gelistet bekommst. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MKZ23 Mitglied Maschinenbau
Beiträge: 6 Registriert: 21.10.2021 Solidworks 2021 SP4.1
|
erstellt am: 26. Okt. 2021 10:33 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bk.sc: Hallo,du kannst das Beispiel das Heinz dir gepostet hast doch teilweise übernehmen. Code: Dim strFileExists As StringstrFileExists = Dir(saveFileName) If strFileExists = "" Then Part.SaveAs2 saveFileName, 0, True, False Else MsgBox "Datei bereits vorhanden - Datei wurde nicht gespeichert" End If
Einfach die Zeile "Part.SaveAs2 saveFileName, 0, True, False" in deinem Macro durch den Code ersetzen. Hier wird dann die Datei nur gespeichert wenn sie noch nicht vorhanden ist.
Hallo bk.sc, so funktioniert es genau wie ich es mir vorgestellt habe. VIELEN DANK für die schnelle Hilfe!!!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MKZ23 Mitglied Maschinenbau
Beiträge: 6 Registriert: 21.10.2021 Solidworks 2021 SP4.1
|
erstellt am: 26. Okt. 2021 10:37 <-- editieren / zitieren --> Unities abgeben:
Damit sich jeder den fertigen Code hier kopieren kann, stelle ich die Lösung noch komplett zur Verfügung. Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim FeatureData As Object Dim Feature As Object Dim Component As Object Dim saveFileName As String Dim strFileExists As String
Sub main() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc swApp.ActiveDoc.ActiveView.FrameState = 1 swApp.ActiveDoc.ActiveView.FrameState = 1 Part.EditSketch If (swApp.ActiveDoc.GetPathName = "") Then 'Abfrage ob die Zeichnung gespeichert wurde MsgBox ("Bitte zuerst Zeichnung speichern!") 'Ausgabefenster Datei erst speichern Exit Sub End If saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + ".pdf" 'Dateiname für PDF festlegen strFileExists = Dir(saveFileName) 'Abfrage ob PDF Datei bereits vorhanden ist If strFileExists = "" Then Part.SaveAs2 saveFileName, 0, True, False 'Speichern als PDF-Datei Else MsgBox "Datei bereits vorhanden - Datei wurde nicht gespeichert" 'Ausgabefenster Datei vorhanden End If End Sub Herzlichen Dank nochmal an bk.sc
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |