VBAではShell関数を使用することで、外部のプログラムやコマンドを実行することができます。
Shell関数からエクスプローラーを呼び出してフォルダを開くことができます。
Shell関数でフォルダを開く
Shell関数を利用してフォルダを開くコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Option Explicit Sub OpenFolder(path As String) '################################################################################### 'フォルダをエクスプローラーで開く '----------------------------------------------------------------------------------- '引数 :path エクスプローラーで開きたいフォルダパス '################################################################################### Shell "C:\Windows\Explorer.exe " & path, vbNormalFocus End Sub Sub TestOpenFolder() Call OpenFolder("C:\") End Sub |
TestOpenFolderを実行すると、WindowsのエクスプローラーでCドライブを開きます。
Shell関数の第1引数には、実行するプログラムやコマンドを指定します。
第1引数に“C:\Windows\Explorer.exe “と開きたいフォルダのパスを結合して渡しています。
第2引数には、プログラムを実行するときのウィンドウの状態を指定します。
vbNormalFocusを指定すると、通常の状態で起動します。
OpenFolder関数に渡す文字列を変えることによって、開くフォルダを変えることができます。
サブフォルダも含めて開く
サブフォルダを含めてエクスプローラーでフォルダを開くにはFileSystemObjectを利用します。
FileSystemObjectを利用するにはMicrosoft Scripting Runtimeに参照設定を行う必要があります。
testフォルダ内にフォルダを全部で6つ用意しました。
test1とtest2はそれぞれ、サブフォルダを2つずつ持ちます。
この6つのフォルダをShell関数を利用して、すべて開いてみます。
1 2 3 4 5 6 7 |
C:\test ├─test1 │ ├─test1-1 │ └─test1-2 └─test2 ├─test2-1 └─test2-2 |
大量のフォルダをShell関数で開くと、画面がエクスプローラーで埋め尽くされてしまうので
事前にフォルダ数を確認してください。
事前にフォルダ数を確認してください。
サブフォルダを含めて、すべてのフォルダをエクスプローラーで開くコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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を実行するとサブフォルダを含めて、エクスプローラーでフォルダを開きます。
コメント
ありがとうございました。わかりやすい解説助かりました。
ハナウタさん、コメントありがとうございます。お役に立てて良かったです。