Excel VBAメモ Windows APIを使わずに今開いているウィンドウのタイトルを取得してみる
必要になったので。
あるところで仕入れたら、Windows APIを使わんでもできるそうな。
ポイントはこれに限るかも。
- Word.Applicationでタスクリストを取得する
※Excelなどには実装されてないらしい…
んで、コード。
Public Function GetProcessNames(ByRef objProcesses As Collection) ' Wordアプリケーションオブジェクトを生成する Dim objWord As Object Set objWordProcess = CreateObject("Word.Application") ' タスクリストから表示中のものだけ取得する Dim objTask As Object For Each objTask In objWordProcess.Tasks ' continueが使えないのでDo-Loopで回避する Do ' 非表示のプロセスはスキップする If objTask.Visible = False Then Exit Do End If ' プロセス名を出力引数に追加する objProcesses.Add objTask.Name Loop While False Next ' オブジェクトを破棄する Set objWord = Nothing End Function
あと、メソッドを呼ぶためのメソッドっぽいの(VBAでいうSubプロシージャ)はこんな感じ。
Public Sub DoFunction() ' ウィンドウタイトルのリストを生成する Dim objProcesses As Collection Set objProcesses = New Collection ' ウィンドウタイトルを取得する Call GetProcessNames(strTitle, objProcesses) ' オブジェクトを破棄する Set objProcesses = Nothing ' タイトルをイミディエイトウィンドウに表示する Dim objName As Variant objName = "" For Each objName In objProcesses Debug.Print objName Next End Sub
実行したら、こんな感じ。
スタート Microsoft Visual Basic - プロセス.xls [実行中] - [ThisWorkbook (コード)] Microsoft Visual Basic - Book2.xls - [Sheet1 (コード)] Microsoft Excel - Book2.xls Microsoft Excel - プロセス.xls Skype? - xxx@hotmail.com VBAメモ Windows APIを使わずに階層の深いフォルダーを作成してみる - Mozilla Firefox Program Manager
いつ、VBAの実装が変わるか分からんで、永久に使えるかは分かんないけどね…。
んまま、明日の自分へのメモってことで。
ディスカッション
コメント一覧
まだ、コメントがありません