/ / Prüfen Sie, ob eine bestimmte PDF-Datei geöffnet ist, und schließen Sie sie - Excel, vba, Excel-vba, pdf

Überprüfen Sie, ob eine bestimmte PDF-Datei geöffnet ist und schließen Sie sie - Excel, VBA, Excel-VBA, PDF

Ich verwende diesen Code, um eine PDF-Datei aus einem Word-Dokument zu exportieren.

Vor dem Export muss ich zunächst prüfen, ob eine Datei mit demselben Namen bereits geöffnet ist. Wenn ja, schließen Sie sie und exportieren Sie dann.

Ich habe viele Dinge ausprobiert, hatte aber kein Glück.

Dim adbApp As Acrobat.AcroApp
Dim adbDoc As Acrobat.AcroAVDoc
Dim adbPageView As Acrobat.AcroAVPageView

Set adbApp = CreateObject("AcroExch.App")
Set adbDoc = CreateObject("AcroExch.AVDoc")

If adbDoc.Open("C:Current Letter Preview.pdf", "") = True Then "==> If the file is not open, this line opens it
adbDoc.Close (1) "==> Then close it

If adbDoc Is Nothing Then "==> Doesn"t understand that I want to check if any pdf files are open
adbApp.Exit
End If

Set adbApp = Nothing
End If

Dim wordApp As Word.Application
Dim wordDoc As Word.Document

If IsFileOpen("C:TemporaryLetter.docx") Then
Set wordApp = GetObject(, "Word.Application")
wordApp.Documents("C:TemporaryLetter.docx").Close "==> Is there something like that regarding acrobat IAC?
Else
Set wordApp = CreateObject("Word.Application")

With wordApp
.Visible = True
.WindowState = 2
End With
End If

Set wordDoc = wordApp.Documents.Open("C:TemporaryLetter.docx")

wordDoc.ExportAsFixedFormat OutputFileName:="C:Current Letter Preview.pdf", _
ExportFormat:=wdExportFormatPDF

wordDoc.Close savechanges:=wdDoNotSaveChanges

Set wordDoc = Nothing

If wordDoc Is Nothing Then
wordApp.Quit
End If

Set wordApp = Nothing

Call adbDoc.Open("C:Current Letter Preview.pdf", "")

adbDoc.BringToFront

Set adbPageView = adbDoc.GetAVPageView()

Call adbPageView.ZoomTo(0, 100)

Set adbDoc = Nothing
Set adbPageView = Nothing

Antworten:

4 für die Antwort № 1

Um zu überprüfen, ob die Datei geöffnet ist oder nicht, können Sie den von mir geposteten Code sehen HIER So wird die Verwendung sein

Sub Sample()
Dim Ret

"~~> Change this to the relevant file path and name
Ret = IsFileOpen("C:Current Letter Preview.Pdf")

If Ret = True Then
MsgBox "File is open"
Else
MsgBox "File is Closed"
End If
End Sub

Function IsFileOpen(FileName As String)
Dim ff As Long, ErrNo As Long

On Error Resume Next
ff = FreeFile()
Open FileName For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0

Select Case ErrNo
Case 0:    IsFileOpen = False
Case 70:   IsFileOpen = True
Case Else: Error ErrNo
End Select
End Function

Und um eine Datei zu schließen, müssen Sie APIs verwenden FindWindow und POST-Meldung

Ich habe den Code mit Adobe Reader getestet und daher im folgenden Code den Namen, den ich suche "Current Letter Preview.pdf - Adobe Reader" Möglicherweise haben Sie einen anderen Namen. Bitte ändern Sie ggf..

Option Explicit

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassname As String, ByVal lpWindowName As String) As Long

Private Const WM_CLOSE = &H10

Sub Sample()
Dim Hwnd As Long

"~~> Find the window of the pdf file
Hwnd = FindWindow(vbNullString, "Current Letter Preview.pdf - Adobe Reader")

If Hwnd Then
"~~> Close the file
PostMessage Hwnd, WM_CLOSE, 0, ByVal 0&
Else
MsgBox "Pdf File not found"
End If
End Sub