ブックを開いた時や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()

    'ファイル読込みに時間がかかるとエラーになるためスキップする
    On Error GoTo nextProc
    
    '自動実行したい処理の本体
    MsgBox ("ブックが開かれました")
    
nextProc:
        
End Sub



「ThisWorkbook」と「標準モジュール」の2か所にコードを記述しています。

「ThisWorkbook」の方は、項番1と同じく「workbook_open」のプロシージャを記述し、

その中で標準モジュールの「appFirst」プロシージャを呼び出す様にしています。

実行結果のイメージは省略しますが、どのExcelブックを開いても、項番1と同様の結果が得られます。

これにより、「appFirst」に記述した処理を、Excel起動時に自動実行することができます。



以上です。