今回はVBAの書かれたファイルを開いた時に自動でマクロを実行する方法をご説明します。
ファイルを開いた時にマクロを自動実行させる方法は「Workbook_Open」と「Auto_Open」の2つあります。
それぞれの違いや基本的な使用方法から、筆者がよく使うオープン時にマクロを実行する用途なども、併せてご紹介したいと思います。
完全自動化のツールを作成するには、ファイルオープン時にマクロを実行するのは必須になり、非常に便利です。
1.Workbook_Openで実行する方法
Workbook_Openを使用して、ファイルを開いた時にマクロを自動で実行する方法です。
記述するモジュールはVBEの「Microsoft Excel Objects」の「ThisWorkbook」です。
下の画像の青線で囲われたモジュールです。
この「ThisWorkbook」を開きます。
開くと次のような「General」と「Declarations」となっています。
この「General」をクリックすると「Workbook」を選択できますので、「Workbook」にします。
すると、デフォルトで自動的に「Declarations」が「Open」となり、
Private Sub Workbook_Open()
End Sub
のコードも自動で生成されます。
こちらに呼び出したいプロシージャをCallするか、コードを記述します。
これで次回からファイルを開いた際にマクロ実行が実行されます。
2. Workbook_Openのサンプルコード
記述する場所と「Workbook_Open」を表示する方法がわかりましたので、簡単なサンプルコードをご紹介します。
次のコードは標準モジュールに記載しています。
Sub Sample1()
MsgBox "自動実行成功"
End Sub
次に上記の実行する方法で説明した通り、ThisWorkbookの「Private Sub Workbook_Open()」に「Call」で呼び出す記述します。
Private Sub Workbook_Open()
Call Sample1
End Sub
一度ファイルを閉じて、再度開いてみます。
3.Auto_Openで実行する方法とサンプルコード
次は「Auto_Open」で実行する方法です。
こちらは標準モジュールにプロシージャも処理も記述します。
標準モジュールに次のように記述して、ファイルを閉じてから再度開いてみます。
Private Sub Auto_Open()
MsgBox "自動実行成功"
End Sub
こちらも同様に、ファイルを開いたら実行されました。
これだけ見ると「Workbook_Open」と「Auto_Open」を比較すると「Auto_Open」の方がシンプルで使いやすいと感じますが、デメリットもありますので、次の2つの方法の違いで説明します。
4.Workbook_OpenとAuto_Openの違い
Workbook_OpenとAuto_Openの違いについてご説明します。
違う点 | Workbook_Open | Auto_Open |
記述モジュール | ThisWorkbook | 標準モジュール |
実行順序 | Auto_Openより先 | Workbook_Openの後 |
他のBookを開いたとき | 実行される | 実行されない |
Workbook_OpenとAuto_Openの実行順序は「Workbook_Open」が先に実行されます。
また、他のBookを開いた際にそのBookに「Workbook_Open」が記述されている場合は実行されますが、「Auto_Open」は実行されません。
もし「Auto_Open」の書かれた別のBookを自動実行する場合には次のように記述します。
Workbooks("Sample.xlsm").RunAutoMacros Which:=xlAutoOpen
'もしくは
Application.Run "Sample.xlsm!Auto_Open"
特別な理由がなければ、基本的には「Workbook_Open」の使用を推奨します。
5.オープン時にマクロを実行する用途
ファイルのオープン時にマクロを自動実行する用途として、筆者がよく使うケースをご紹介します。
あくまで個人的によく使用するケースです。
- InputBoxでパスワード入力を求める(入力失敗でファイルクローズ)
- InputBoxでIDを入力してもらいツールの権限管理をする(使用できる機能制限)
- タスクスケジューラで自動実行して完全自動ツールに使用する
- ユーザーフォームをファイルオープン時に表示する
他にもたくさんあると思いますが、オープン時によく行うケースとしてはこのような用途があります。