ブックを開いた時やExcel起動時にマクロを自動実行する
通常Excelマクロは、マクロの実行メニューや(登録済みの)ショートカットから呼び出さなければ実行できませんが、
「ブックを開いた時やExcel起動時にマクロを自動実行したい」
と思う時がしばしばあります。
1.ブックを開いた時にマクロを自動実行する(workbook_open)
「workbook_open」 イベントプロシージャを利用して、実現することができます。
任意のExcelブックに以下のサンプルソースを記述してください。
[サンプルソース]
Sub workbook_open() MsgBox ("ブックが開かれました") End Sub |
[コード記述箇所]
任意のExcelブック>VBAProject>Microsoft Excel Objects>ThisWorkBook
Book1が開かれた時に、メッセージを表示します。
応用すれば、色々なことができそうですね。
「workbook_open」は、ブック自体に指定できるイベントプロシージャです。openイベントに反応して実行されます。
ブックへの指定となるため、標準モジュールではなく「ThisWorkbook」に記述しなければなりません。
また、ファイル保存時はマクロありの「.xlsm」形式で保存が必要になるため、注意が必要です。
参考
エクセルExcel大事典 VBAマクロ イベントプロシージャ Open Target Cancel EnableEvents Volatile
2.Excel起動時にマクロを自動実行する
項番1の方法では、ブックにあらかじめコードを記述しておかなければなりません。そこで、ブックを指定せず、Excel全般にコードを適用します。
これにより、Excel起動時にマクロを自動実行することができます。
(正確には、任意のブックを開くたびに実行します)
[方法]
⇒PERSONAL.XLSBにコードを記述する。
[コードの記述箇所]
(1) PERSONAL.XLSB>Microsoft Excel Objects>ThisWorkBook
(2) PERSONAL.XLSB>標準モジュール>任意のモジュール
[サンプルソース(1)]※ThisWorkBookに記述
'PERSONAL.XLSB ThisWorkBook 'WithEventsにてApplicationオブジェクト(Excel全体を示すオブジェクト)に発生するイベントを拾える様にする 'PERSONAL.XLSBに記述することで、全てのExcelファイルに適用される。 Public WithEvents xlAPP As Application 'Excelブックが開いた時に自動実行する。 Private Sub Workbook_Open() 'アプリケーションオブジェクトを取得 Set xlAPP = Application '標準モジュールの呼出し '直接呼び出すとエラーになるため、実行時間をずらして呼び出す。 Application.OnTime Now + TimeSerial(0, 0, 1), "appFirst" End Sub |
[サンプルソース(2)]※標準モジュールに記述
'PERSONAL.XLSB 標準モジュール firstModule 'Excel起動時に自動実行するマクロを記述する。 'マクロの実行メニューにPublicプロシージャが表示されないようにする。 Option Private Module 'Excel起動時に自動実行するプロシージャ Public Sub appFirst() 'ファイル読込みに時間がかかるとエラーになるためスキップする |
「ThisWorkbook」と「標準モジュール」の2か所にコードを記述しています。
「ThisWorkbook」の方は、項番1と同じく「workbook_open」のプロシージャを記述し、
その中で標準モジュールの「appFirst」プロシージャを呼び出す様にしています。
実行結果のイメージは省略しますが、どのExcelブックを開いても、項番1と同様の結果が得られます。
これにより、「appFirst」に記述した処理を、Excel起動時に自動実行することができます。
以上です。