VBAではShell
関数を使用することで、外部のプログラムやコマンドを実行することができます。
Shell 関数 (Visual Basic for Applications) | Microsoft Learn
Shell関数からエクスプローラーを呼び出してフォルダを開いてみます。
Shell関数でフォルダを開く #
Shell
を利用してフォルダを開くコードです。
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に参照設定を行う必要があります。
VBAで参照設定を行う
·1 分
Programming
VBA
testフォルダ内にフォルダを全部で6つ用意しました。
test1とtest2はそれぞれ、サブフォルダを2つずつ持ちます。
この6つのフォルダをShell
を利用して、すべて開いてみます。
C:\test
├─test1
│ ├─test1-1
│ └─test1-2
└─test2
├─test2-1
└─test2-2
大量のフォルダをShell関数で開くと、画面がエクスプローラーで埋め尽くされてしまうので、
事前にフォルダ数を確認してください。
サブフォルダを含めて、すべてのフォルダをエクスプローラーで開くコードです。
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
を実行するとサブフォルダを含めて、エクスプローラーでフォルダを開きます。