質問: エクセル VBA 開いているPDFを閉じる方法はありますか?
回答: こんにちは。 ファイルをバイナリーで直接開くことができるか、で、つかまっているかだけは、わかります。 開いていたら、apiで探すのですが、ウィンドが非表示だったり、タブが見えていないとき、ウィンド名で探せないことがあるのですが、「見えていたら」apiで閉じるメッセージを投げ込んで閉じます。 ウィンドの名前は、ファイル名ですね。 'ウインドウハンドルを取得する Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassname As String, ByVal lpWindowName As String) As Long 'ウインドウのキャプションタイトルを取得する Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _ (ByVal Hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long 'ウインドウが可視かどうかを取得する Declare Function IsWindowVisible Lib "user32" (ByVal Hwnd As Long) As Long '次または前のウインドウハンドルを取得する Declare Function GetNextWindow Lib "user32" Alias "GetWindow" _ (ByVal Hwnd As Long, ByVal wFlag As Long) As Long Const GW_HWNDLAST = 1 Const GW_HWNDNEXT = 2 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 Const WM_CLOSE = &H10 Sub キャプション名の一部からウインドウハンドルを取得する() Dim Hwnd As Long Dim strCaption As String * 80 Dim 対象ウインドウハンドル As Long 対象ウインドウハンドル = 0 Hwnd = FindWindow(vbNullString, vbNullString) '1つめのウインドウを取得する Do If IsWindowVisible(Hwnd) Then GetWindowText Hwnd, strCaption, Len(strCaption) If InStr(strCaption, "ファイル名.pdf") <> 0 Then 対象ウインドウハンドル = Hwnd Exit Do End If End If Hwnd = GetNextWindow(Hwnd, GW_HWNDNEXT) Loop Until Hwnd = GetNextWindow(Hwnd, GW_HWNDLAST) '最後のウインドウになるまで繰り返す If 対象ウインドウハンドル = 0 Then MsgBox "みつかりません" Else PostMessage 対象ウインドウハンドル, WM_CLOSE, 0, ByVal 0& End If End Sub