Makro-PDF-Aufzeichnung mit Fehlerbehandlung

Hallo, ich verwende derzeit den folgenden Code, um ein MEP im PDF-Format zu speichern

longstatus = Teil.SaveAs3(Dateipfad + Dateiname + ".PDF", 0, 0)

 

Keine Probleme auf dieser Seite, AUSSER wenn das besagte PDF bereits geöffnet ist und daher zu diesem Zeitpunkt nicht überschrieben wird, ist das SolidWorks blockiert und wartet auf unbestimmte Zeit, bis das PDF wieder überschrieben wird. Ich weiß nicht, ob mein Problem sehr verständlich ist, aber wenn jemand eine Lösung hat, bin ich daran interessiert:)

Sie müssen eine Fehlerverwaltung in Ihrem Makro durchlaufen

oder eine Schleife mit einem Gültigkeitszeitraum.

Sie finden es leicht in Programmierforen

2 „Gefällt mir“

Persönlich habe ich dafür ein langes VBA-Programm verwendet... also werde ich dir nicht alles zurückbringen;)

Aber für den Teil, der Sie interessierte, war meine Linie etwas anders, aber ich fragte mich, ob ich auf eine bereits vorhandene Datei schreiben wollte und wies darauf hin, dass es unmöglich war zu schreiben, wenn sie bereits geöffnet ist.

 

Also, ich denke, damit sollte es funktionieren:)

 

boolstatus = swpdfext. SpeichernUnter(namePDF, 0, 0, swPDF, IErrors, IWarnings)

 

mit

Dim swpdfext As SldWorks.ModelDocExtension

Dim swPDF As SldWorks.ExportPdfData

Dim swpdfext As SldWorks.ModelDocExtension

Dimmen Sie IErrors so lange wie möglich

Dimmen Sie IWarnings so lange

Dim boolstatus als boolescher Wert

 

Legen Sie swpdfext = swdoc fest. Erweiterung

Setze swPDF = swapp. GetExportFileData(1)

Legen Sie swpdfext = swdoc fest. Erweiterung

 

namePDF = DateiPfad & neuer Name & ".pdf"

FilePath ist der Datensatzordner

Neuname ist der Name Ihrer Datei

Und ob das Öffnen der PDF-Datei schreibgeschützt ist. Zerkleinern sollte kein Problem sein.

 Danke todescocoin37coin & Bart☺

für Ihre Antworten, aber nichts hilft, das Makro friert ein, solange die PDF-Datei nicht geschlossen wird, ich habe eine Fehlerbehandlung versucht, aber es reagiert auch nicht :/

Hallo

Ich denke, der untenstehende Link sollte Ihnen helfen können:

http://www.cpearson.com/excel/IsFileOpen.aspx

Hallo

Dies ist zum Beispiel möglich:

        protected virtual bool IsFileLocked(FileInfo-Datei )
        {
            FileStream-Strom = null;
            versuchen
            {
                stream = Datei. Open(FileMode.Öffnen Sie FileAccess. Lesen, FileShare. Keine);
            }
            catch (IOException)
            {
                true zurückgeben;
            }
            endlich
            {
                if (Strom != null)
                    Bach. Schließen();
            }
            false zurückgeben;
        }

wie folgt aufzurufen:

           ModellDoc2 SWPart = null;
            SWPart = ((ModelDoc2)(SolidWorksMacro.swapp. ActiveDoc));
            Erstellen Sie die PDF-Datei auf dem Desktop
            ZeichenfolgennamePDF = Zeichenfolge. Leer;
            namePDF = System. Umwelt. GetFolderPath(System.Umwelt. SpecialFolder verwenden. Desktop) + "\\test.pdf";
            
            DateiInfo namePDFinfo = neue DateiInfo(namePDF);
            if (IsFileLocked(namePDFinfo))
            {
                MessageBox. Show("Schreibgeschützt");
                Rückkehr;
            }
            SWPart. Speichern unter(namePDF);

 

Tut mir leid, es ist C# (also in VBA zu übersetzen), aber das Prinzip ist:

1°) Erstellen Sie eine Funktion, mit der Sie feststellen können, ob die Datei verwendet wird.

2°) Testen Sie, ob die Datei verwendet wird, bevor Sie sie als PDF speichern.

Herzliche Grüße

 Danke Cyril.f 

 

Dies ergibt den folgenden Code

If IsFileOpen(FilePath + FileName + ". DWG") = dann wahr
MsgBox "Die "Datei & DateiPfad + Dateiname +". DWG wird gerade von einem Benutzer verwendet und kann daher nicht überschrieben werden."
Oder
longstatus = Teil.SaveAs3(Dateipfad + Dateiname + ". DWG", 0, 0)
Ende, wenn

nach DWG oder PDF anzupassen, ohne zu vergessen, ein Modul mit dem Inhalt von Cyrils Link hinzuzufügen.