excel Vbaの開いているすべてのPDFファイルを検出して一覧表示することは可能ですか?特定の既知のPDFファイルとパスを確認できますが、この場合ファイル名とパスはわかりません。Excelのすべての開いているPDFファイルを検出して一覧表示するVBA
おかげで
excel Vbaの開いているすべてのPDFファイルを検出して一覧表示することは可能ですか?特定の既知のPDFファイルとパスを確認できますが、この場合ファイル名とパスはわかりません。Excelのすべての開いているPDFファイルを検出して一覧表示するVBA
おかげで
私はこのようなもののためにAHKを使用することができライアンWildryによってコメントで思い出しました。ここでは、私が使用して終了コードです:
私はVBAの正規表現のパターンを設定するので、どのようにPDFウィンドウのタイトルが表示されます。私は以前のアプリケーションのためにウェブから引っ張ったいくつかの機能を使用しました。
メインVBA:AHKを呼び出す
Private Sub Get_PDFs()
Dim pattern As String
Dim ahkParamColl As Collection
Dim windowArr() As String
'regex pattern to match with open Adobe PDF Files
pattern = "^(.+)\.pdf - Adobe Reader$"
'add pattern to AHK parameter collection
Set ahkParamColl = Nothing
Set ahkParamColl = New Collection
ahkParamColl.Add (pattern)
'run window detection AHK Script
Call Functions.Run_AHK("Detect All Open Windows.ahk", ahkParamColl)
'send list to array
windowArr = Split(GetClipBoardText, Chr(10))
End Sub
機能:クリップボードのテキストを取得する
'these are for AHK scripts to run from Excel
Public Const ahk_ScriptsLoc = """C:\Location of Scripts\" 'starts w/a quote
Public Const ahk_PgmLoc = "C:\Location of AHK Pogram\AHK.exe"
Function Run_AHK(AHK_Script_Name As String, Optional Parameters As Collection)
'Call AHK script from VBA
Dim i As Integer
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
Dim AHKscript As String
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
'set the ahk script string to call
AHKscript = ahk_PgmLoc & " " & ahk_ScriptsLoc & AHK_Script_Name & """ """
'add parameters to script string
If Not Parameters Is Nothing Then
For Each s In Parameters
AHKscript = AHKscript & s & """ """
Next s
End If
'run ahk script
wsh.Run AHKscript, windowStyle, waitOnReturn
End Function
機能:
Public Function GetClipBoardText()
Dim DataObj As MsForms.DataObject
Set DataObj = New MsForms.DataObject
On Error GoTo Whoa
'~~> Get data from the clipboard.
DataObj.GetFromClipboard
'~~> Get clipboard contents
myString = DataObj.GetText(1)
GetClipBoardText = myString
Exit Function
Whoa:
If Err <> 0 Then MsgBox "Data on clipboard is not text or is empty"
End Function
メインAHK(Hereから引っかかる):
;regex pattern sent from calling application
pattern = %1%
;get all window names and loop through
WinGet windows, List
Loop %windows%
{
id := windows%A_Index%
WinGetTitle wt, ahk_id %id%
;if window matches pattern, add to list
IF (RegexMatch(wt,pattern)>0) then
{
s .= wt . "`n"
}
}
;send list to clipboard
Clipboard := s
したがって、VBAマクロはAHKスクリプトに送信される正規表現パターンを設定します。後で必要に応じて他の文書タイプや名前パターンにも使用できます。 AHKが呼び出され、開いている各ウィンドウをループし、定義されたパターンと一致するかどうかを確認し、それを文字列に追加します。この文字列はクリップボードに送られ、VBAはこれを読み込んで、使用する配列に分割します。
私はそこにもっと効率的な方法があると確信していますが、これは楽しい方法であり、一緒にまとめることができる唯一の方法でした。
このためにWin APIを使用できます。参照:https://support.microsoft.com/en-us/help/183009/how-to-enumerate-windows-using-the-win32-apiこれを行うには、AutohotkeyやAutoITのようなラッパー言語を使う方が簡単かもしれません。 –
@Siddharth Routには[この他のフォーラム](https://www.experts-exchange.com/questions/26817662/VBA-または-VBS-enumerate-all-open-Acrobat-Reader-documents.html)のソリューションがあります。 –
@Ryan Wildryありがとう!私はいつもAHKを使っていくつかの分野でExcel VBAの機能不足を回避できることを忘れています。 –