指定のフォルダをエクスプローラーで開く方法を紹介します。
Thisworkbook.Pathなどで取得できるフォルダパス
「C:\Users\ユーザー名\Desktop\テストフォルダ」
を利用して、そのフォルダを表示するマクロですね。
これを実行するコードがこちらです。
Sub フォルダをエクスプローラーで開く() Dim フォルダパス As String フォルダパス = "C:\Users\ユーザー名\Desktop\テストフォルダ" Shell "C:\windows\explorer.exe " & フォルダパス & "\", vbNormalFocus End Sub
エクスプローラーなどの外部のプログラムを実行する際はShell関数を使います。
他の用途では、.txtファイルをメモ帳で開くといったときにも使います。
局所的な使い方しかしないコードですので、
おまじないだと思って使って構いません。
最後の引数「vbNomalFocus」は、開くエクスプローラーを、
「最後に開いたエクスプローラーと同サイズで最前面に」しています。
要するにいつものフォルダを開いたときと同じ挙動ですね。
めったにないと思いますが、
「最大化」したり、「最前面にしないで裏で開く」などをやりたい場合は、
Shell関数 引数でググってください。
注意点として、このコードは「フォルダが存在しないとき」にエラーになりません。
カレントディレクトリ(ドキュメントフォルダなど)が初期値として表示されます。
「フォルダがないときはエクスプローラーを開かない」などを実装する場合は、
フォルダの存在を調べるDir関数を使って、
If Dir(フォルダパス, vbDirectory) <> "" Then Shell "C:\windows\explorer.exe " & フォルダパス & "\", vbNormalFocus Else MsgBox "指定のフォルダは存在しません。" End If
このように組んでください。
前述の通り使い道がかなり限られたコードです。
このコードを覚えても他に使い道があまりありませんので、
このような汎用関数にしてしまうと良いです。
Function フォルダをエクスプローラーで開く(指定フォルダパス As String) As Boolean If Dir(指定フォルダパス, vbDirectory) <> "" Then Shell "C:\windows\explorer.exe " & 指定フォルダパス & "\", vbNormalFocus フォルダをエクスプローラーで開く = True End If End Function
こうしておけば、例えば自分自身の保存フォルダを開くときは、
Call フォルダをエクスプローラーで開く(Thisworkbook.Path)
で済むようになりますので、もう二度と関数の中身を見なくてよくなります。
Shell関数という存在も記憶から消してOK。
この手の関数は結果の成否を返り値で判定できるようにしておくことで、
MsgBoxが欲しいとき/いらない時のどっちにも使えます。
If フォルダをエクスプローラーで開く = False Then MsgBox "フォルダが存在しません。" End If
以上で「フォルダをエクスプローラーで開く」コードの解説を終わります。
なお、ただエクスプローラーを開くだけでなく、エクスプローラー(正確にはダイアログボックス)を開いてユーザーにフォルダを選択してもらい、ユーザーからフォルダのパスを受け取るコードはこちらの記事を参考ください。
本記事のコードは「フォルダを開く」だけのコードです。
- たくさんのブックを生成するマクロの完了時に、ブックを作ったフォルダを表示してユーザーに見せる。
- 「フォルダを開く」ボタンをシートに設置する。
などにお使いください。
また、「フォルダを開く」ボタンをシートに設置するのであれば、
ハイパーリンクを使った方が楽なことも多いです。
この方法もあるということは覚えておいてください。