みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでファイルやフォルダを操作する方法をお伝えしています。
前回ですが、エクセルファイルを開いたときに、自動で他の複数のブックを開く方法についてお伝えしました。
しかし、開く対象は「ブック」つまりエクセルファイルなんですね。WordやPDFなど、他のアプリケーションのファイルも自動で開きたい場合はどうしたらよいでしょうか…?
ということで、今回はエクセルVBAでエクセル以外の他のアプリケーションのファイルを開く方法についてお伝えします。
よろしくお願いいたします!
前回のおさらいと今回のお題
まず、前回作成したプログラムのおさらいです。
Sub Auto_Open()
Workbooks.Open "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\エクセル-1.xlsx"
Workbooks.Open "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\エクセル-2.xlsx"
End Sub
イベントプロシージャAuto_Openにより、二つのブックつまりエクセルファイルを開くプログラムでした。シンプルです。
PDFやWordファイルをWorkbooks.Openで開いてみる
このプログラムですが、自動で開く対象としてPDFファイルや、Wordファイルも追加して実行してみましょう。
以下一文を追加します。
Workbooks.Open "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\PDF.pdf"
Workbooks.Open "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\ワード.docx"
実行してみましょう。PDFに関してはどうやら開いたような気がしますが…
中身ぐちゃぐちゃ…。そしてWordファイルに関しては
エラーが出ましたね。実行時エラー「ファイル形式が正しくありません。」が出ました。
当然ですが、Workbooks.OpenではPDFファイルや、Wordファイルは開けないのです。
Wordファイルだけなら、Word.Applicationオブジェクトを使って開くという方法もありますが、ファイル形式ごとに別のやり方…というのは面倒ですよね。
他のやり方はないものでしょうか。
エクセルファイルもそれ以外のアプリケーションのファイルを開く
エクセルVBAでエクセルファイルもエクセル以外の他のアプリケーションのファイルを開く方法についてお伝えします。
ShellオブジェクトのShellExecuteメソッドを使う方法があります。
ShellオブジェクトはWindowsのウィンドウなどを操作することができるオブジェクトで、今回紹介するファイルを開く以外にも様々な操作が可能です。必要に応じて調べてみてください。
Shellオブジェクトの生成
まず、Shell.Applicationオブジェクトの生成ですが
と書きます。これでShellオブジェクトが生成されます。
ShellExecuteでファイルを開く
任意のファイルを既定のアプリケーションで開きたい場合は
とします。ShellExecuteメソッドは指定したファイルに対して、オプション指定することで様々な動作を実行することができるのですが、指定しなければ既定の動作である「open」つまりファイルを開く動作が実行されます。
もちろん、エクセルファイルも既定のアプリケーションであるエクセルで開くことができますよ。
エクセル以外のファイルも開くプログラム
ではプログラムにしてみましょう。
Sub Auto_Open()
With CreateObject("Shell.Application")
.ShellExecute "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\エクセル-1.xlsx"
.ShellExecute "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\エクセル-2.xlsx"
.ShellExecute "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\PDF.pdf"
.ShellExecute "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\開くファイル\ワード.docx"
End With
End Sub
Withを使えばShellオブジェクトのために変数宣言やセットしなくて済みますね。
では、実行してみましょう。
全てのファイルが、それぞれ既定のアプリケーションで開くことができましたね。
まとめ
エクセルVBAでエクセル以外のアプリケーションも開く方法をお伝えしました。
エクセルファイルも同じ方法で開くことができます。
これでいつも使うファイルは一気に開いてしまいましょう。
さて、しかしながら開くファイルはマクロ内にベタ打ち…もし、ファイルの場所が変わったら、修正が面倒ですよね?
次回、その点を解消していければと思います。
どうぞお楽しみに!