Servus,
ich speichere einen Bericht als PDF und öffne ihn danach mittels
DoCmd.OutputTo acOutputReport, "rptErfassung", acFormatPDF, "c:\temp\rptErfassung.pdf", True
Wenn der Anwender die PDF minimiert, und den Befehl allerdings nochmals auslöst, kann der PDFBericht natürlich nicht gespeichert/überschrieben werden, weil die PDF ja noch geöffnet ist.
Kann man in diesem Fall automatisch eine zweite Version "c:\temp\rptErfassung_v2.pdf" erzeugen? Oder gibt es einen Befehl, mit dem die geöffnete Datei gezielt schließen kann?
Hallo ironpete!
Folgender Vorschlag:
In ein Modul schreibe
Option Explicit
Function DateiIstFrei(sDateiname As String) As Boolean
Dim hFile As Integer
On Error Resume Next
hFile = FreeFile()
Open sDateiname For Random Access Read Lock Read Write As #hFile
If Err Then
DateiIstFrei = False
Else
DateiIstFrei = True
End If
Close #hFile
End Function
Bevor du das neue pdf erstellst prüfe mit
If DateiIstFrei(PDF_Name) = False Then
MsgBox "Datei ist bereits geöffnet !"
... weitere Aktionen wie Schließen, neuer Name oä
else
... was auch immer
End If
Code habe ich auch mit Excel getestet und funktioniert.
Gerade bei Excel sollte man aber vorsichtig sein, da ein Schließen der Datei eventuell ja auch schon gemachte Änderungen verwirft wenn man nicht aufpasst
LG
Golfidur
Danke. ich habe es so gelöst:
Option Compare Database
Option Explicit
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_CLOSE = &H10
-----------------------------------------------------
Public Sub SchliessePdf(strDatei As String)
Dim hwnd As Long
hwnd = FindWindow(vbNullString, strDatei & " - Adobe Reader")
If hwnd <> 0 Then
Call SendMessage(hwnd, WM_CLOSE, 0, 0)
End If
End Sub