Registriert seit: 27.08.2020
Version(en): Office 365
27.04.2024, 12:44
(Dieser Beitrag wurde zuletzt bearbeitet: 27.04.2024, 12:45 von matthias wehrli.)
Mein Code verbesert sich täglich, natürlich unter anderem wegen freundlichster Unterstützung aus diesem Forum. Dafür sei hier, bevor ich mein "heutiges Problem schildere", allen Lesern und Mitdenkern gedankt. Ich finde es wirklich toll, dass es hier eine so unterstützende Community gibt, vielen Dank.
Nun, ich erstelle via UF ein Dokument, welches sich letztendlich als .pdf ausdrucken lässt. Wenn ich mein.pdf Dokument geöffnet habe und mit meinem Programm eine neu Version des .pdfs erstellen möchte dann kriege ich natürlich eine Fehlermeldung (diesmal publiziere ich sie auch brav):
Laufzeitfehler '-2147018887 (80071779)': Das Dokument wurde nicht gespeichert.
Grund für die Fehlermeldung und den Abbruch des Programm ist natürlich, dass ich nicht zwei Dokumente mit demselben Namen geöffnet haben kann. Im habe im Netz nach Löungen gesucht und auch etwas gefunden, doch ist's nicht ganz das, was ich möchte: Ich möchte eigentlich nur eine msgbox einblenden, dass das Programm nicht gespeichert wird und möchte nicht, dass mein Programm abbricht und mir eine Debuggermeldung angibt (quasi ein if documents.open = True then exit sub) .
Gibts da findige Köpfe? Alternativ habe ich mir auch überlegt, dass ein neues dokument mit der fortlaufenden Endung (1), (2), ... erstellt wird, äquivalent zu Windows. Ist das einfacher?
Ich bedanke mich wie immer schon im Voraus für Unterstützung.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
1) wenn die Datei offen ist, tritt der Fehler nicht in jedem Fall auf - z.B., wenn die Datei im Browser offen ist.
2) On Error GoTo ende 'pdf-Ausgabe '... ende: if err then msgbox "Fehler " & err.number & vblf & err.description End Sub
Ob Du dann nach der Meldung mit Resume Next weitermachst, oder danach fertig bist, sei dahingestellt.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo
wenn du den Code, mit dem das Dokument erstellt wird hochlädst, können wir vielleicht eine Erweiterung einbauen, das dieses Dokument unter (2), (3) erneut gespeichert wird. Dazu müssten wir den Code aber sehen.
mfg Gast 123
Registriert seit: 29.09.2015
Version(en): 2030,5
Warum hast du ein PDF geöffnet während du in Excel arbeitest ?
Registriert seit: 27.08.2020
Version(en): Office 365
28.04.2024, 21:11
(Dieser Beitrag wurde zuletzt bearbeitet: 28.04.2024, 21:12 von matthias wehrli.)
Vielen Dank für die zahlreichen Rückmeldungen. Anscheinend hab ich mich mal wieder unpräzise ausgedrückt ;)
Mein Programm befüllt mittels eines UF eine tabelle, die anschliessend mit folgendem Befehl als .pdf abgespeichert wird:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ ThisWorkbook.Path & "\Sets\" & UserForm.ListBox1.Value & ".pdf", Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _True
Ich möchte eigentlich das .pdf nach dem Erstellen öffnen, daher ist OpenAfterPublish:=_False nicht wirklich erwünscht. Wenn nun aber dieses erstellte .pdf mit Adobe & Co geöffnet wird und ich via UF dieselbe Datei nochmals erstellen möchte, weil ich eine kleine Änderung / Einstellungen an den Daten vorgenommen habe, dann geht das eben nicht. Gibt es eine Möglichkeit, ein geöffnetes .pdf via VBA zu schliessen und erst danach den Befehl zum Erstellen und Anzeigen der Datei auszulösen???
if ThisWorkbook.Path & "\Sets\" & UserForm.ListBox1.Value & ".pdf EXISTS Then kill endif
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ ThisWorkbook.Path & "\Sets\" & UserForm.ListBox1.Value & ".pdf", Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _True
Das wäre evtl. eine Lösung.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, Zitat:Gibt es eine Möglichkeit, ein geöffnetes .pdf via VBA zu schliessen Man kann z.B. schauen, dass man per WMI den Prozess herausfindet und per TASKKILL beendet. Mann könnte aber eben auch den Edge als Standard zum Öffnen von pdf nehmen, dann sollte es ohne zusätzliche Maßnahme gehen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
26865
Nicht registrierter Gast
Ein Klassiker, der bei mir zuverlässig ermittelt, ob eine PDF (bzw. beliebige Datei) geöffnet ist und nicht überschrieben werden kann: https://www.online-excel.de/excel/singsel_vba.php?f=54
Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:1 Nutzer sagt Danke an Gast für diesen Beitrag 28
• matthias wehrli
00202
Nicht registrierter Gast
Moin, ein weiterer Klassiker ist WMIC. Leider wird uns das Tool - da es mächtig und gut ist - von MS wieder weggenommen ( Unternehmensstrategie? Ist was gut, nimm es den Leuten weg?). In diesem Beitrag ist ein Beispiel. Muss man noch anpassen.
Registriert seit: 27.08.2020
Version(en): Office 365
29.04.2024, 16:03
(Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2024, 16:06 von matthias wehrli.)
Der Tip Von EarlFred scheint zu funktionieren (immerhin erhalte ich dann keine Laufzeitfehlermeldung mehr. Leider sind meine VBA Kentnisse etwas zu berscheiden, um den Script ganz zu verstehen. Ich habe versucht, mit Remarks den Ausdruck zu verstehen. Sind meine Versuche korrekt?
Private Function DateiGeoeffnet(DerPfad As String) As Boolean On Error Resume Next ' weitergehen, auch wenn Laufzeitfehler auftritt, ABER IN WELCHER ZEILE? Open DerPfad For Binary Access Read Lock Read As #1 ' öffne die Datei für Lesezugriff Close #1 ' schliesse die Datei wieder If[/color] Err.Number <> 0 Then ' wenn dabei ein Fehlerauftritt, dann ... DateiGeoeffnet = True ' Setze eine Variable "Die Datei ist noch offen" Err.Clear ' Fehlermeldung wieder auf 0 setzen End[/color] If End Function
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, Zitat:ABER IN WELCHER ZEILE einfach NEXT übersetzen
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
|