Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Checken, ob eine Datei schon geöffnet ist
#1
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.
Antworten Top
#2
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)
Antworten Top
#3
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
Antworten Top
#4
Warum hast du ein PDF geöffnet während du in Excel arbeitest ?
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
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.
Antworten Top
#6
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)
Antworten Top
#7
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:
  • matthias wehrli
Antworten Top
#8
Moin, 19 

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?). Dodgy

In diesem Beitrag ist ein Beispiel. Muss man noch anpassen. 21
Antworten Top
#9
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
Antworten Top
#10
Hallöchen,

Zitat:ABER IN WELCHER ZEILE

einfach NEXT übersetzen Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • matthias wehrli
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste