みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
お仕事でいつも決まった複数のエクセルファイルを使っていませんか?
朝来たら、全部のファイルをダブルクリック…頻繁にあると思うとちょっと面倒ですよね。
特定のファイルを開いたら、一緒に使用する他のファイルも一気に開いたりするととっても便利です。
今回は、エクセルVBAでブックを開いたら一緒に他のワークブックも自動で開くプログラムを紹介します。
Auto_Openというイベントプロシージャを使いますよ。
では、行ってみましょう。
Workbooks.Openでワークブックを開く
エクセルVBAでワークブックを開く場合は、Workbooks.Openを使います。
書き方は
ですね。
「Workbook」ではなくて「Workbooks」ですよ。「s」が入るので注意して下さいね。Workbooksコレクションに開いたワークブックを追加する、みたいなイメージです。
開くファイルの指定は「フルパス」で指定する必要があります。Windowsであれば、だいたいCドライブから始まるこんなやつです。
複数のワークブックを開くプログラム
ですから、例えば
Sub OpenFiles()
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でファイルを開いたときに実行する
…ですが、これでは「特定のファイルを開いたら一緒に他のファイルも自動で開く」ではありませんね。
現在マクロを仕込んでいるワークブックを開いたら自動で開くようにしたいのです。
そのような場合は、プロシージャ名を
と変更をすればOKです。たったそれだけです。
ブックを起動時に他のブックも起動するプログラム
わざわざ書くまでもないですが
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
として保存。閉じてから再度開くと
マクロを記述した「ファイルを開く.xlsm」とともに、マクロ内で指定した二つのファイルも開きます。
イベントプロシージャAuto_Open
このからくりですが、イベントプロシージャというものです。
VBAにはイベントプロシージャというものがありまして、ワークブックやワークシートなどのオブジェクトに対して何らかのイベントが発生したときに、自動で走らせるプロシージャを仕込むことができるのです。
今回のAuto_Openは標準モジュールに仕込むことができ、手動でマクロを記述したファイルを開いた際に実行されるものです。
けっこう便利なので覚えておきましょう。
Auto_OpenとWorkbook_Openとの違い
Auto_Openと同じく、ワークブックが開いたときに実行されるイベントプロシージャとしてWorkbook_Openというものがあります。
これらの違いは何でしょうか…?
一つ目は記述先です。Auto_Openは標準もジュールに記載をしますが、Workbook_Openはブックモジュール「ThisWorkbook」に記述します。
二つ目は起動条件です。VBAでブックを開いたときに違いが出ます。つまり、これですね。
Workbooks.Open "C:\Users\Noriaki\Dropbox\40_ブログ\vba-file-dir\ファイルを開く.xlsx"
これで開いたとき、Workbook_Openは実行されますが、Auto_Openは実行されません。
まとめ
以上、エクセルVBAでファイルを開いたときに他のファイルも一緒に自動で開く方法についてお伝えしました。
ちょっとしたツールですが、毎日の作業を考えるとけっこう便利なのではないかと思います。
さて、以降このツールをどんどんパワーアップさせていきます。
まず、現在はWorkbooks.Openを使っていますから、ちゃんと開ける対象はエクセルファイルだけです。ワードとか、テキストファイルとかも開きたいじゃないですか。
次回、エクセル以外の他のアプリケーションのファイルを開く方法をお伝えします。
どうぞお楽しみに!