我使用此代码从word文档中导出pdf文件。
在导出之前,我需要首先检查一个具有相同名称的文件是否已经打开,如果是这样,则将其导出。
我尝试过很多东西,但没有运气。
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
答案 0 :(得分:5)
要检查文件是否已打开,您可以看到我发布的代码HERE因此用法将是
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
要关闭文件,您必须使用API FindWindow和PostMessage
我已经使用Adobe Reader测试了代码,因此在下面的代码中,我要搜索的名称是"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