PDF-Makro-Verbesserung

Hallo

Um beim Thema PDF-Makro (http://www.lynkoa.com/forum/cao/macro-d-enregistrement-pdf-dans-dossier-actuel#answer-617678) anzuknüpfen, möchte ich nun einen "Bug" verbessern, der die Nutzung des Makros nicht blockiert, aber auf Dauer etwas nervt.

Wenn ein .PDF Plan in der Werkstatt zur Beratung geöffnet wird und ich eine Änderung vornehmen muss. auf derselben Ebene direkt auf Solidworks und ich dieses PDF-Makro verwende, stürzt Solidworks ab und wird geschlossen, da es die PDF-Datei nicht überschreiben kann, da sie bereits geöffnet ist.

Wenn ich jedoch versuche, den Plan zu speichern, indem ich .PDF "Datei" - "Speichern sous-.PDF" verwende, wird die Meldung "Diese Datei ist schreibgeschützt" angezeigt und ermöglicht es Solidworks, nicht abzustürzen.

Wäre es möglich, eine Codezeile in meinem Makro abzurufen, die es mir ermöglichen würde, diese Meldung zu erhalten, wenn die Datei bereits geöffnet ist, und Solidworks nicht zum Absturz zu bringen?

Hier ist das Makro, das .PL mir vorgeschlagen hatte (nochmals vielen Dank!):

 

Sub main()

Legen Sie swApp = Application.SldWorks fest

Set Part = swApp.ActiveDoc

Ruft den vollständigen Pfad des aktuellen Dokuments ab, einschließlich des Dateinamens:
Pfadname = UCase(Teil.GetPfadname)


myModelView als Objekt dimmen
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Teil.EditRebuild3()
Teil.ViewZoomtofit2
Teil.ViewZoomtofit2
Teil.ViewZoomtofit2
longstatus = Part.SaveAs3(Ersetzen(UCase(Pfadname), "SLDDRW", "PDF"), 0, 0)
Ende Sub

 

Vielen Dank im Voraus für Ihre Hilfe,

Herzliche Grüße

Allan.

Hallo

Sie müssen überprüfen, ob die Datei geöffnet ist, um eine Warnmeldung zu erstellen.

Siehe diese Seite :

https://support.microsoft.com/en-us/kb/153058

Und hier ist der Code:

Sub main()
Legen Sie swApp = Application.SldWorks fest
Set Part = swApp.ActiveDoc
Ruft den vollständigen Pfad des aktuellen Dokuments ab, einschließlich des Dateinamens:
Pfadname = UCase(Teil.GetPfadname)
myModelView als Objekt dimmen
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Teil.EditRebuild3()
Teil.ViewZoomtofit2
Teil.ViewZoomtofit2
Teil.ViewZoomtofit2
    Wenn GetAttr(Replace(UCase(PathName), "SLDDRW", "PDF") und vbReadOnly dann
        MsgBox "Schreibgeschützte Datei"
    Oder
        longstatus = Part.SaveAs3(Ersetzen(UCase(Pfadname), "SLDDRW", "PDF"), 0, 0)
    Ende, wenn
Ende Sub

 

 

1 „Gefällt mir“

Hallo

Hier ist diejenige, die wir verwenden, sie speichert die Datei mit ihrem Namen im Zeichnungsordner.


macro_pdf.swp

Vielen Dank für Ihre Antwort .PL, jedoch funktioniert das Makro nicht, anscheinend gibt es ein Problem mit dieser Zeile: Wenn GetAttr(Replace(UCase(PathName), "SLDDRW", "PDF") und vbReadOnly dann

Als ich mir den Link ansah, den Sie mir auch zur Verfügung gestellt haben, sah ich, dass es einen Punkt vor dem ReadOnly geben sollte, aber ich habe versucht, ihn hinzuzufügen, und es hat sich nichts geändert.

Vielen Dank im Voraus und Entschuldigung für meine völlige Unkenntnis in der VBA-Kodierung...

Zwischen GetAttr(Replace(UCase(PathName), "SLDDRW", "PDF") und AND fehlte eine Klammer .

Hier ist der neue Code:

 

Entfernen von Code

Ich habe den Code geändert, falls die PDF-Datei nicht existiert, hier ist sie:

Sub main()
Legen Sie swApp = Application.SldWorks fest
Set Part = swApp.ActiveDoc
Ruft den vollständigen Pfad des aktuellen Dokuments ab, einschließlich des Dateinamens:
Pfadname = UCase(Teil.GetPfadname)
myModelView als Objekt dimmen
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Teil.EditRebuild3()
Teil.ViewZoomtofit2
Teil.ViewZoomtofit2
Teil.ViewZoomtofit2

If Dir(Replace(UCase(PathName), "SLDDRW", "PDF")) <> "" Then
    Wenn GetAttr(Replace(UCase(PathName), "SLDDRW", "PDF")) und vbReadOnly dann
        MsgBox "Schreibgeschützte Datei"
    Oder
        longstatus = Part.SaveAs3(Ersetzen(UCase(Pfadname), "SLDDRW", "PDF"), 0, 0)
    Ende, wenn

Ende, wenn
Ende Sub

Vielen Dank.PL Sie sich für mich die Mühe machen, leider funktioniert das Makro immer noch nicht, es generiert überhaupt nichts.

Ich versuche, mein Bestes zu tun, um Ihre Zeit nicht zu verschwenden, also bin ich zurück zu den Klammern usw. gegangen, aber ich sehe nichts, sorry, der Code scheint mir gut zu sein...

Liegt ein Fehler vor oder passiert nichts?

Entschuldigung, kleiner Fehler meinerseits, es wird mich lehren, nicht genug zu testen!

Jetzt sollte es funktionieren!

Sub main()
Legen Sie swApp = Application.SldWorks fest
Set Part = swApp.ActiveDoc
Ruft den vollständigen Pfad des aktuellen Dokuments ab, einschließlich des Dateinamens:
Pfadname = UCase(Teil.GetPfadname)
myModelView als Objekt dimmen
Festlegen von myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Teil.EditRebuild3()
Teil.ViewZoomtofit2
Teil.ViewZoomtofit2
Teil.ViewZoomtofit2

If Dir(Replace(UCase(PathName), "SLDDRW", "PDF")) <> "" Then
    Wenn GetAttr(Replace(UCase(PathName), "SLDDRW", "PDF")) und vbReadOnly dann
        MsgBox "Schreibgeschützte Datei"
    Oder
        longstatus = Part.SaveAs3(Ersetzen(UCase(Pfadname), "SLDDRW", "PDF"), 0, 0)
    Ende, wenn

    Oder
        longstatus = Part.SaveAs3(Ersetzen(UCase(Pfadname), "SLDDRW", "PDF"), 0, 0)

Ende, wenn
Ende Sub

Vielen Dank für dieses neue Makro, es funktioniert tatsächlich, aber unter bestimmten Bedingungen, und um dies zu lösen, weiß ich nicht, ob ich derjenige bin, der etwas reparieren muss, oder ob das Makro verbessert werden kann.

 

Wenn ich eine Zeichnung öffne und eine neue PDF-Datei erstelle, gibt es keine Datei.

Auf der anderen Seite, wenn ich versuche, die PDF-Datei aus der Zeichnung zu generieren, während sie geöffnet ist, bringe ich Solidworks wie zuvor zum Absturz.

Dieses Problem wird behoben, wenn ich die PDF-Datei öffne, nachdem ich das Kontrollkästchen "Attribute: Schreibgeschützt" in den Eigenschaften aktiviert habe. An dieser Stelle funktioniert das Makro und die Meldung "Schreibgeschützte Datei" erscheint, wenn ich versuche, das PDF zu generieren. Erst nach dem Schließen der PDF-Datei beim Versuch der Regeneration erscheint immer noch die Meldung  "Schreibgeschützte Datei", als ob die Datei geöffnet bleibt, obwohl dies nicht der Fall ist. Ich schaffe es, das Problem zu lösen, indem ich "Attribute: Schreibgeschützt" in den Eigenschaften deaktiviere und dann das PDF sich regenerieren möchte.

 

Liegt es an mir, Lese-/Schreibrechte festzulegen oder muss das Makro geändert werden?

Danke für Ihre Hilfe.

 

Konnten Sie meine testen?

Hallo Manu67, ich konnte Ihr Makro nicht testen, denn wenn ich auf den Link Ihrer Antwort klicke, öffnet es einen unbeschreiblichen Code für mich, ich habe das gleiche Problem für alle Anhangslinks in der Nachricht im Forum.

Guten Abend

Wenn ich mich nicht irre, kann das schreibgeschützte Attribut nicht direkt auf PDF-Dateien extrahiert werden.

Wir sollten uns die Dateilöschfunktionen der file-Methode ansehen (siehe: http://warin.developpez.com/access/fichiers/#LI-D-2) und die gewünschte Behandlung entsprechend dem Ergebnis anwenden (if error --> Read-only file).

Hier ist das Makro, das wir verwenden:

 

Dim swApp als SldWorks.SldWorks
Dim swModel As ModelDoc2
Fehler so lange dimmen
Dim lWarnungen so lange

Sub main()

Legen Sie swApp = Application.SldWorks fest
Festlegen von swModel = swApp.ActiveDoc
swModel.Extension.SaveAs GetFilename(swModel.GetPathName) & " rev." & swModel.GetCustomInfoValue("", "Revision") & ".pdf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nichts, lErrors, lWarnungen

Ende Sub


Funktion GetFilename(strPath als Zeichenfolge) als Zeichenkette
    Dim strTemp As String
    strTemp = Mid$(strPfad, InStrRev(strPfad, "\") + 1)
    GetFilename = Links$(strTemp, InStrRev(strTemp, ".") - 1)
Ende-Funktion

Hallo

Hier ist diejenige, die funktioniert und die ich gerade getestet habe:

Dim swApp als SldWorks.SldWorks
Dim swModel As ModelDoc2
Fehler so lange dimmen
Dim lWarnungen so lange

Sub main()

Legen Sie swApp = Application.SldWorks fest
Festlegen von swModel = swApp.ActiveDoc
swModel.Extension.SaveAs GetFilename(swModel.GetPathName) & " rev." & swModel.GetCustomInfoValue("", "Revision") & ".pdf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nichts, lErrors, lWarnungen

Ende Sub

Funktion GetFilename(strPath als Zeichenfolge) als Zeichenkette
Dim strTemp As String
strTemp = Mid$(strPfad, InStrRev(strPfad, "\") + 1)
GetFilename = Links$(strTemp, InStrRev(strTemp, ".") - 1)
Ende-Funktion

Hallo

 

Ich habe genau das gleiche Problem, ich werde Ihre Lösung testen, um zu sehen, ob sie funktioniert, und ich möchte den Schraubstock noch weiter vorantreiben. Wenn ein PDF-Plan im Windows Explorer im Vorschaufenster geöffnet wird, sieht die Sicherung gut aus, aber die PDF-Datei ist unlesbar. Eine Erklärung?

 

Komm schon, ich teste deine Codes!

Kleines Feedback nach Tests. 

 

Für meinen Teil funktioniert der PL-Code nicht. 

manu67, ich habe Ihren Code nicht ausprobiert, weil ich ihn nicht verstehe (und da ich gerne verstehe, was ich tue...)

 

Also habe ich etwas recherchiert und bin auf Folgendes gekommen:

https://support.microsoft.com/en-us/kb/291295

Um dies zu vervollständigen (wegen Fehlerproblem 75): http://stackoverflow.com/questions/12599322/check-if-a-file-is-already-open-vba

Es funktioniert gut, es erkennt, ob die PDF-Datei auf einem anderen Computer geöffnet ist. Auf der anderen Seite habe ich die offenen PDFs einfach auf einer anderen Workstation liegen gelassen und es sagt mir immer noch, dass sie offen sind... um zu sehen, ob es von selbst zurückkommt, ob es am Server liegt....