Check if a certain pdf file is open and close it

前端 未结 1 1296
北恋
北恋 2020-12-15 14:31

I use this code to export a pdf file from a word document.

Before exporting I need to check first if a file with the same name is already open, and if so close it th

相关标签:
1条回答
  • 2020-12-15 15:37

    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
    
    0 讨论(0)
提交回复
热议问题