检查某个pdf文件是否打开并closures

我使用这个代码从word文档中导出pdf文件。

在导出之前,我需要首先检查是否已经打开了一个同名的文件,如果是,closures它然后导出。

我尝试了很多东西,但没有运气。

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 

要检查文件是否打开,你可以看到我发布的代码这里的用法是

 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 

closures一个文件,你将不得不使用API FindWindow和PostMessage

我已经使用Adobe Readertesting了代码,因此在下面的代码中,我正在search的名称是"Current Letter Preview.pdf - Adobe Reader"您可能有不同的名称。 请根据情况更改。

 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