To check if the file is open or not, you can see the code that I posted HERE So the usage will be
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
And to close a file, you will have to use APIs FindWindow and PostMessage
I have tested the code with Adobe Reader and hence in the code below, the name that I am searching for is "Current Letter Preview.pdf - Adobe Reader"
You may have a different name. Please change as applicable.
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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…