2015-01-10 24 views
3

打開它後,我現在用的是FollowHyperlink方法,這裏顯示打開PDF文件,關閉打開的PDF:使用FollowHyperlink

Sub Sample() 
    ActiveWorkbook.FollowHyperlink "C:\MyFile.pdf" 
End Sub 

經發現at this thread

我的問題是,我該如何關閉pdf?

+1

您將不得不導入一些WinAPI的User32函數並枚舉頂級窗口,以查找與使用PDF名稱構造的字符串匹配的窗口標題。似乎更容易點擊PDF閱讀器右上角的×。 – Jeeped

+0

聽起來很複雜...我只是用發送鍵alt f4 – bsapaka

+0

這可能是一個壞主意@bsapaka。發送密鑰最好不可靠。你可能會無意中關閉一個不同的程序。 – RubberDuck

回答

1

這裏有兩個選項我使用。

選項1:這個選項我用它來殺死所有打開的互聯網瀏覽器,當它們不可見(又名我搞砸了)。可能有一種方法可以將文件單獨出來,但我不完全確定沒有API調用,就像@Jeeped提到的那樣。我將列出第二個API調用。

要找出您正在運行的Adobe類型。打開Windows任務管理器>進程並使用說明Adobe Reader查找.exe。

Sub Kill_All_PDFs() 

    '***ErrorHandler*** 
    On Error Resume Next 

    '***Define Variables*** 
    Dim objectWMI As Object 
    Dim objectProcess As Object 
    Dim objectProcesses As Object 

    '***Set Objects*** 
    Set objectWMI = GetObject("winmgmts://.") 
    Set objectProcesses = objectWMI.ExecQuery(_ 
     "SELECT * FROM Win32_Process WHERE Name = 'AcroRd32.exe'") '< Change if you need be 

    '***Terminate all Open PDFs*** 
    For Each objectProcess In objectProcesses 
     Call objectProcess.Terminate 
    Next 

    '***Clean Up*** 
    Set objectProcesses = Nothing 
    Set objectWMI = Nothing 
End Sub 

選項2 API調用方法:

在這裏,您將能夠通過標題來找到你的PDF文件。我修改了代碼來查找Adobe,但是如果您想進一步閱讀它的工作原理,下面列出了源代碼。只需添加顯示在PDF文件頂部的標題即可。

來源:http://support.microsoft.com/kb/168204

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

    Private Declare Function SendMessage _ 
    Lib "user32" Alias "SendMessageA" _ 
    (ByVal hwnd As Long, _ 
    ByVal wMsg As Long, _ 
    ByVal wParam As Long, _ 
    lParam As Long) _ 
    As Long 

    Private Sub Close_AdobeReader() 
    Dim lpClassName As String 
    Dim lpCaption As String 
    Dim Handle As Long 

    Const NILL = 0& 
    Const WM_SYSCOMMAND = &H112 
    Const SC_CLOSE = &HF060& 

    lpClassName = "AcrobatSDIWindow" 
    lpCaption = "e.g.name - Adobe Reader" '< add Title Here 

    '* Determine the handle to the Calculator window. 
    Handle = FindWindow(lpClassName$, lpCaption$) 

    '* Post a message to Calc to end its existence. 
    Handle = SendMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, NILL) 

    End Sub 

希望這有助於你對你的方式!