• ベストアンサー

VBAで開いているフォルダーを最前面に表示

Excel VBAで指定したフォルダーを開きたいのですが、 Shell "Explorer.exe "・・・を使用すると幾つもフォルダーが開きます。 フォルダーが開いているかのチェックはできるのですが、 後ろに隠れているフォルダーを最前面に表示する方法がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.4

> hwnd = FindWindow(vbNullString, [フォルダーのフルパス](文字型変数を使用)) > を記述してみましたが、ハンドルが取得できずエラーとなりました。 フルパスではなくフォルダ名だけでいいです。 添付画像でtestとなっているところにフルパスからフォルダ名だけ取り出したものと同じフォルダ名が出てると思います。 そこのところを指定しています。 画僧のフォルダだと hwnd = FindWindow(vbNullString, "test") になります。

petitets123
質問者

お礼

ご回答いただいた通りに設定変更してみたら、うまく表示できるようになりました。 ありがとうございました。 ただ、フルパスは異なるが、最終のフォルダ名が有った場合の判定処理が必要になりますね。 また、考えてみます。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.3

No.2の追加です。 タイトルからすると > 後ろに隠れているフォルダーを最前面に表示する方法がわかりません。 複数開くのは問題ないけれど、その中でどれかを最前面にしたいという事でしたら No.2の回答になります。 ただ、前半を読むと > Excel VBAで指定したフォルダーを開きたいのですが、 > Shell "Explorer.exe "・・・を使用すると幾つもフォルダーが開きます。 こちらが問題とも感じます(一つだけ開きたいのに複数開くことが問題) だとしたら、開くコードを変更しなければいけないのではないでしょうか。 また、開いたフォルダを最前面にしたいのでしたら C:\Testを開いたとして Shell "Explorer.exe C:\Test", vbNormalFocus とすればいけると思います。

petitets123
質問者

補足

早速のご回答ありがとうございます。 説明のため、日本語で希望の処理を記載します if 指定フォルダーが開いていたら then   指定フォルダーを前面に表示 else    Shell "Explorer.exe " & 指定フォルダー, vbNormalFocus endif 以上の処理がしたいです。 上記分岐処理が無い場合、指定フォルダーが幾つも開いてしまい、「×(閉じる)」で画面を幾つも閉じる作業が出てしまい不便を感じています。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.2

> Shell "Explorer.exe "・・・を使用すると幾つもフォルダーが開きます サブフォルダも含めて開いているのだと思いますが、どれを最前面にしたいのか不明なので、開いているフォルダ名を配列変数にでも保存しておいて順番に最前面にするとしたら https://liclog.net/setforegroundwindow-function-vba-api/ こちらの最後のコードで 'クラス名からハンドルを取得する場合 hwnd = FindWindow("Notepad", vbNullString) 上記をコメントにして 'ウィンドウ名からハンドルを取得する場合 hwnd = FindWindow(vbNullString, "無題 - メモ帳") 上記の「無題 - メモ帳」をフォルダ名に変更してください。

petitets123
質問者

補足

早速のご回答ありがとうございます。 ご教授いただきましたサイトを参考に、 hwnd = FindWindow(vbNullString, [フォルダーのフルパス](文字型変数を使用)) を記述してみましたが、ハンドルが取得できずエラーとなりました。

  • NuboChan
  • ベストアンサー率47% (799/1673)
回答No.1

>後ろに隠れているフォルダーを最前面に表示する この「後ろに隠れている」とはどのような状態のフォルダーですか? 階層の下部にあるフォルダーを含めて開くの意味ですか? そうだとすれば下記が参考になりませんか? サブフォルダも含めて開く https://kazusa-pg.com/vba-open-folder-by-shell/ サブフォルダを含めて、すべてのフォルダをエクスプローラーで開くコードです。 Visual Basic Option Explicit Sub OpenSubFolders(path) Dim fso As New FileSystemObject Dim subFolder As Folder For Each subFolder In fso.GetFolder(path).SubFolders Shell "C:\Windows\Explorer.exe " & subFolder.path, vbNormalFocus Call OpenSubFolders(subFolder.path) Next Set fso = Nothing Set subFolder = Nothing End Sub Sub TestOpenSubFolders() Call OpenSubFolders("C:\test") End Sub TestOpenSubFoldersを実行するとサブフォルダを含めて、エクスプローラーでフォルダを開きます。

petitets123
質問者

補足

早速のご回答ありがとうございます。 を開いた後に、 Excelの処理の流れで、あるフォルダー参照する機能を実装しています。 マウスで後ろに有るフォルダーをクリックして前面に出せばよいのですが、色々なフォルダーを開いていた場合は、どのフォルダーか調べる必要が出てきます。 また、使用したいフォルダーが開いていない場合は、そのフォルダーを指定して開ける作業が出てきます。 パソコン初心者に、対象となるフォルダーが開いているか否かを認識させずに、対象フォルダーを表示する処理を考えています。

関連するQ&A