- 締切済み
VBAでウィンドウのキャプションとフルパスを取得
ExcelVBAを用いて、以下のことをやりたいと考えています。 (1)全ウィンドウのハンドルを取得する。 (2)取得したハンドルを、可視ウィンドウのハンドルのみに絞り込む (3)ハンドルから、ウィンドウのキャプション、ファイル名を含むフルパスの2つを抽出する。 (4)Excelのセルへ 「キャプション フルパス ハンドル」 の順に横に並ぶように出力する。 (5)Excelの行を下へ移動する。 (6)(3)~(6)を、全ての可視ウィンドウに対して順に行う。 結果としては 1つめのキャプション 1つめのフルパス 1つめのハンドル 2つめのキャプション 2つめのフルパス 2つめのハンドル 3つめのキャプション 3つめのフルパス …… と結果出力を行いたいと考えています。 まず、他の質問サイトなどの過去暦も含めて探ってみました。 その結果、全可視ウィンドウのキャプションを取得する方法とアクティブウィンドウのフルパスを取得する方法がそれぞれ見つかったのですが、自分なりに組み合わせても上手く動作しませんでした。 なんとか、解決方法を教えていただければと思います。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- ap_2
- ベストアンサー率64% (70/109)
何がどう上手くいかないのか・・・。せっかく試行錯誤しても、結局「コード書いて!」になってちゃ悲しいですよ。 ステップ実行やブレイクポイントで止めて、ローカルウィンドウで変数の中をチェック。Debug.Printでイミディエイトにログ出力もできます。デバッグのしやすさがVBA最大の魅力。使いこなして!! #ハマるとしたら固定長文字列のあたりかな、と。以下、参考になれば Sub test() Call EnumWindows(AddressOf GetWndProc, 0) End Sub Function GetWndProc(ByVal hWnd As Long, lParam As Long) As Boolean Dim ret As Long Dim myCaption As String * 128 If IsWindowVisible(hWnd) Then ret = GetWindowText(hWnd, myCaption, Len(myCaption)) Debug.Print " * " & Left(myCaption, InStr(myCaption, vbNullChar) - 1) End If GetWndProc = True End Function