エクスプローラーで指定フォルダを開くには
VBAを実行中に、実行結果が格納されているフォルダをエクスプローラーで開きたい場合があります。VBAで新規ブックやテキストファイルを作成して、それを確認したい場合などです。
ここでは指定したフォルダをエクスプローラで開く方法を紹介します。
エクスプローラーは「C:\Windows\explorer.exe」がアプリケーション本体です。VBAのコードでもこの「explorer.exe」を利用します。
WindowsにはXP、Vista、7、8、8.1、10、11といくつかのOSバージョンがありますが、explorer.exeはいずれも基本的には同じところにあります。ただ、業務用で使うPCなどではWindowsのインストールドライブがDドライブだったりすることもあります。
もしexplorer.exeの場所が分からなければ、エクスプローラーを普通に起動してアドレス欄に「%SystemRoot%」と入力+Enterを押せばexplorer.exeの場所が分かります。「%SystemRoot%」とはWindowsを操作するのに重要なファイルやアプリケーションがいろいろ格納されているフォルダの「C:\Windows」を表す環境変数です。
explorer.exeを実行するとエクスプローラーが起動しますが、その起動はShell関数を使います。詳しくは以下のコードをご参照ください。
VBAのExcelマクロブックがあるフォルダをエクスプローラーで開くコード
以下のコードはVBAを実行しているExcelマクロブックと同じフォルダをエクスプローラーで開きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub OpenVBABookFolderInExplorer() Dim sPath As String '// エクスプローラーで開くフォルダパス Dim sCommand As String '// 実行するコマンド文字列 '// エクスプローラーで開くフォルダを指定する sPath = ThisWorkbook.Path '// Shell関数に渡すコマンド文字列を指定する sCommand = "explorer.exe """ & sPath & """" '// エクスプローラーを起動して指定フォルダを開く Call Shell(PathName:=sCommand, WindowStyle:=vbNormalFocus) End Sub |
「ThisWorkbook.Path」がVBAが保存されているExcelブックのフォルダパスを表します。この部分に開きたいフォルダパスを指定すれば、任意のフォルダをエクスプローラーで開くことが出来ます。
「ThisWorkbook」は実行しているVBAが保存されているExcelブックを示すWorkbookオブジェクトです。
「ThisWorkbook.Path」は実行しているVBAの関数が「C:\test\a.xlsm」に保存されているのであれば「C:\test\a.xlsm」を指し、「PERSONAL.XLSB」のVBAの関数を実行しているのであればPERSONAL.XLSBを指します。
ThisWorkbookの詳細については「ThisWorkBookとActiveWorkBookの違い」をご参照ください。
あとはShell関数でエクスプローラーのアプリケーション本体である「explorer.exe」と半角スペースで区切って「explorer.exe」への引数として開く先のフォルダパスであるExcelマクロブックがあるフォルダを指定しています。
「explorer.exe」はフォルダパスを指定していませんが、環境変数「SystemRoot」にフォルダパスの「C:\WINDOWS」として定義されているため、「explorer.exe」にフォルダパスが付いてなくても環境変数のどれかに定義されているフォルダパスに「explorer.exe」が無いかを探しにいきます。
Shell関数の第二引数の「WindowStyle」は起動したアプリケーション(ここではエクスプローラー)のウィンドウの状態を指定します。ここで指定している「vbNormalFocus」はエクスプローラーを前回起動したときと同じウィンドウサイズで開くための定数です。
Shell関数の詳細については「VBAで他のアプリケーションで起動する(Shell)」をご参照ください。
現在利用しているブックのフォルダをエクスプローラーで開くコード
上のコードではVBA実行中のExcelマクロブックのフォルダをエクスプローラーで開く内容でしたが、現在利用中のアクティブブックのフォルダを開く場合は以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub OpenActiveWorkbookFolderInExplorer() Dim sPath As String '// エクスプローラーで開くフォルダパス Dim sCommand As String '// 実行するコマンド文字列 '// エクスプローラーで開くフォルダを指定する sPath = ActiveWorkbook.Path '// Shell関数に渡すコマンド文字列を指定する sCommand = "explorer.exe """ & sPath & """" '// エクスプローラーを起動して指定フォルダを開く Call Shell(PathName:=sCommand, WindowStyle:=vbNormalFocus) End Sub |
上のコードと異なるのは6行目の「ActiveWorkbook.Path」の部分だけです。あとは同じです。