Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Makro PDF Export mit Abfrage Datei bereits vorhanden

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

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

Beiträge: 6
Registriert: 21.10.2021

Solidworks 2021 SP4.1

erstellt am: 22. Okt. 2021 11:17    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 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



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: 22. Okt. 2021 11: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 Nur für MKZ23 10 Unities + Antwort hilfreich

Hallo GMKZ,

hier ist ein Beispiel
https://www.automateexcel.com/vba/file-exists/

------------------
Grüße
Heinz

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

riesi
Mitglied
CAD-Admin


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

Beiträge: 1073
Registriert: 06.05.2002

SWX Premium 2020-Sp5

erstellt am: 22. Okt. 2021 13:11    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 MKZ23 10 Unities + Antwort hilfreich

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

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

Beiträge: 6
Registriert: 21.10.2021

Solidworks 2021 SP4.1

erstellt am: 22. Okt. 2021 15:51    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 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

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

Beiträge: 6
Registriert: 21.10.2021

Solidworks 2021 SP4.1

erstellt am: 22. Okt. 2021 16:05    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

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



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

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

Nach der Reaktion stehen hier die geneigten Helfer sicherlich Schlange.....

SCNR

------------------
Wenn ,Wenn....Wenn meine Tante Nüsse hätte, dann wäre sie mein Onkel....

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: 25. Okt. 2021 14:43    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 MKZ23 10 Unities + Antwort hilfreich

Hallo,

du kannst das Beispiel das Heinz dir gepostet hast doch teilweise übernehmen.

Code:
Dim strFileExists As String

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

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

Beiträge: 6
Registriert: 21.10.2021

Solidworks 2021 SP4.1

erstellt am: 26. Okt. 2021 07:00    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

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


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

Beiträge: 1073
Registriert: 06.05.2002

SWX Premium 2020-Sp5

erstellt am: 26. Okt. 2021 09:56    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 MKZ23 10 Unities + Antwort hilfreich

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

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

Beiträge: 6
Registriert: 21.10.2021

Solidworks 2021 SP4.1

erstellt am: 26. Okt. 2021 10:33    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

Zitat:
Original erstellt von bk.sc:
Hallo,

du kannst das Beispiel das Heinz dir gepostet hast doch teilweise übernehmen.

Code:
Dim strFileExists As String

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

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

Beiträge: 6
Registriert: 21.10.2021

Solidworks 2021 SP4.1

erstellt am: 26. Okt. 2021 10:37    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

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

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