エクセルVBAでエクセル以外の他のアプリケーションを開く方法


open-window

photo credit: CJS*64 “Man with a camera” Calle Del Arco ! via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでファイルやフォルダを操作する方法をお伝えしています。

前回ですが、エクセルファイルを開いたときに、自動で他の複数のブックを開く方法についてお伝えしました。

エクセルVBAでブックを開いたときに他のワークブックも一緒に自動で開く
エクセルで特定のファイルを開いたら、一緒に使用する他のファイルも自動で開くと便利です。今回はAuto_Openというイベントプロシージャを使ってブック起動時に他のブックも自動で開く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に関してはどうやら開いたような気がしますが…

エクセルVBAのWorkbooks.OpenでPDFファイルを開いた

中身ぐちゃぐちゃ…。そしてWordファイルに関しては

エクセルVBAのWorkbooks.OpenでWordファイルを開いた

エラーが出ましたね。実行時エラー「ファイル形式が正しくありません。」が出ました。

当然ですが、Workbooks.OpenではPDFファイルや、Wordファイルは開けないのです。

Wordファイルだけなら、Word.Applicationオブジェクトを使って開くという方法もありますが、ファイル形式ごとに別のやり方…というのは面倒ですよね。

他のやり方はないものでしょうか。

エクセルファイルもそれ以外のアプリケーションのファイルを開く

エクセルVBAでエクセルファイルもエクセル以外の他のアプリケーションのファイルを開く方法についてお伝えします。

ShellオブジェクトのShellExecuteメソッドを使う方法があります。

ShellオブジェクトはWindowsのウィンドウなどを操作することができるオブジェクトで、今回紹介するファイルを開く以外にも様々な操作が可能です。必要に応じて調べてみてください。

Shellオブジェクトの生成

まず、Shell.Applicationオブジェクトの生成ですが

CreateObject(“Shell.Application”)

と書きます。これでShellオブジェクトが生成されます。

ShellExecuteでファイルを開く

任意のファイルを既定のアプリケーションで開きたい場合は

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で様々なアプリケーションのファイルを開いた

全てのファイルが、それぞれ既定のアプリケーションで開くことができましたね。

まとめ

エクセルVBAでエクセル以外のアプリケーションも開く方法をお伝えしました。

エクセルファイルも同じ方法で開くことができます。

これでいつも使うファイルは一気に開いてしまいましょう。

さて、しかしながら開くファイルはマクロ内にベタ打ち…もし、ファイルの場所が変わったら、修正が面倒ですよね?

次回、その点を解消していければと思います。

エクセルVBAでDir関数を使って指定のファイルが存在するかどうかを判定する方法
エクセルVBAでファイルを開く作業を自動化する方法についてのシリーズ。今回は開くファイルの指定をエクセルシートに変更し、またファイルが存在するかどうかをDir関数で判定する方法についてお伝えします。

どうぞお楽しみに!

連載目次:エクセルVBAでファイルやフォルダを操作する方法

お仕事でいつも決まったファイルをいつも一つずつダブルクリックして開くの…毎日だと思うと面倒ですよね。 このシリーズでは、ファイルを自動で開く、フォルダ一覧を出力するなど、エクセルVBAでファイルやフォルダを操作する方法についてお伝えしていきます。
  1. エクセルVBAでブックを開いたときに他のワークブックも一緒に自動で開く
  2. エクセルVBAでエクセル以外の他のアプリケーションを開く方法
  3. エクセルVBAでDir関数を使って指定のファイルが存在するかどうかを判定する方法
  4. エクセルVBAでFileDialogオブジェクトを使ってファイル選択ダイアログを開く
  5. エクセルVBAでフォルダ内のファイル一覧を表示するDir関数の使い方
  6. エクセルVBAでDir関数を使ってフォルダ一覧を表示する方法

タイトルとURLをコピーしました