Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

output to PDF --> wie wenn PDF geöffnet?

Begonnen von ironpete, Juli 03, 2014, 08:11:08

⏪ vorheriges - nächstes ⏩

ironpete

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?

Golfidur

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

ironpete

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