【VBA】Shell関数を使用してフォルダを開く
VBAではShell関数を使用することで、外部のプログラムやコマンドを実行することができます。
Shell関数からエクスプローラーを呼び出してフォルダを開くことができます。
Shell関数でフォルダを開く
Shell関数を利用してフォルダを開くコードです。
1Option Explicit
2Sub OpenFolder(path As String)
3'###################################################################################
4'フォルダをエクスプローラーで開く
5'-----------------------------------------------------------------------------------
6'引数 :path エクスプローラーで開きたいフォルダパス
7'###################################################################################
8 Shell "C:\Windows\Explorer.exe " & path, vbNormalFocus
9
10End Sub
11
12Sub TestOpenFolder()
13
14 Call OpenFolder("C:\")
15
16End 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関数を利用して、すべて開いてみます。
1C:\test
2├─test1
3│ ├─test1-1
4│ └─test1-2
5└─test2
6 ├─test2-1
7 └─test2-2
Warning
大量のフォルダをShell関数で開くと、画面がエクスプローラーで埋め尽くされてしまうので
事前にフォルダ数を確認してください。
サブフォルダを含めて、すべてのフォルダをエクスプローラーで開くコードです。
1Option Explicit
2Sub OpenSubFolders(path)
3
4 Dim fso As New FileSystemObject
5 Dim subFolder As Folder
6
7 For Each subFolder In fso.GetFolder(path).SubFolders
8 Shell "C:\Windows\Explorer.exe " & subFolder.path, vbNormalFocus
9 Call OpenSubFolders(subFolder.path)
10 Next
11
12 Set fso = Nothing
13 Set subFolder = Nothing
14
15End Sub
16
17Sub TestOpenSubFolders()
18
19 Call OpenSubFolders("C:\test")
20
21End Sub
TestOpenSubFoldersを実行するとサブフォルダを含めて、エクスプローラーでフォルダを開きます。