そのブックを開いた時に自動実行

ワークブックを開いた時に即座に自動実行させる方法です。

単一機能のマクロを収容したワークブックでは、そのブックを開いた時のイベントでそのマクロを動作させる方法があります。
最も簡単なのは、標準モジュール内の起動させるプロシージャ名をAuto_Openとすることです。これは立ち上げ時処理として既定されているプロシージャ名なのでワークブックの立ち上げ時に起動されます。

戻る 先頭に戻る

イベント動作

ワークブックやシート上のイベントを利用してマクロを起動させます。

一般的なマクロは、ユーザーが「起動させる」との意図で動かしますが、イベント処理では次のようなオペレーション動作をWindowsが察知してExcelに通知してきます。このプロシージャ名と記述する場所はあらかじめ決められています。

ここでイベント処理の記述があると、その動作を行ないます。
サンプルでは、どのイベントがどのタイミングで発生するかが判るようにメッセージを表示させています。

Option Explicit

' ワークブックを閉じる前のイベント(キャンセル可)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If MsgBox("Workbook_BeforeCloseイベントが発生しました。" & vbCr & _
        "キャンセルしますか?", vbInformation + vbYesNo) = vbYes Then
        Cancel = True
    End If
End Sub

' ワークブックを保存する前のイベント(キャンセル可)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If MsgBox("Workbook_BeforeSaveイベントが発生しました。" & vbCr & _
        "キャンセルしますか?", vbInformation + vbYesNo) = vbYes Then
        Cancel = True
    End If
End Sub

' ワークブックを開く時のイベント
Private Sub Workbook_Open()
    ActiveWindow.ScrollRow = 1
    MsgBox "Workbook_Openイベントが発生しました。"
End Sub

' シートを切り替えるイベント
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    MsgBox "Workbook_SheetActivateイベントが発生しました。" & vbCr & _
        "シート名は" & Sh.Name & "です。"
End Sub

' ウィンドウを切り替えるイベント(自ブックが手前)
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    MsgBox "Workbook_WindowActivateイベントが発生しました。"
End Sub

' ウィンドウを切り替えるイベント(自ブックが裏)
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    MsgBox "Workbook_WindowDeactivateイベントが発生しました。"
End Sub

このサンプルのワークブックを開くと、
イベントの動作
この2つのメッセージが続けて表示されます。
(どの画像をクリックしても同じExcelワークブックは開きますが、InternetExproler上で開くとイベント動作が正しく処理されないことがありますので、画像を右クリックしてディスクに保存させて保存した物を開いて下さい。)

このコードは標準モジュールを追加して記述するものではありません。
ThisWorkbookのコードを表示
赤矢印が指す「ThisWorkbook」というクラスモジュールに記述します。この「ThisWorkbook」はワークブックに対して元々存在するクラスモジュールなので追加等は行ないません。
ThisWorkbook」をそのままダブルクリックするか、右クリックの「コードの表示」で開きます。

ThisWorkbook」のコードページが開いたら、記述が必要なイベントをプルダウンから選択します。
ワークブックイベントの記述
ThisWorkbook」の場合、左のプルダウンは「(General)」と「Workbook」のみです。「(General)」はモジュールレベル変数を記述する部分なので、「Workbook」を選択して下さい。
続いて右のプルダウンを選ぶと、「Workbook」でのイベントのリストが表示されます。ここから必要なイベントを選択すれば空の「Subプロシージャ」作成されます。後は動作の記述を埋めていくだけです。なお、このプロシージャ名を変更すると動作しません。

ワークシート上のセル選択の変更やセル内容の変更をイベントで検出する場合は、上の「ThisWorkbook」ではなく、各ワークシートのコードページにイベントの記述を行ないます。
Sheet1のコードを表示
赤矢印が指すワークシートクラスモジュール(ここでは「Sheet1」)に記述します。ここでの「Sheet1」は下のプロパティの「(オブジェクト名)」で名称変更できます。ワークシート側のシート名とは別に管理されています。ワークシートのコードページは当然、ワークシートそれぞれにあるのでイベント処理が必要なワークシートに記述します。
Sheet1」をそのままダブルクリックするか、右クリックの「コードの表示」で開きます。

ワークシートのコードページが開いたら、記述が必要なイベントをプルダウンから選択します
ワークシートイベントの記述
プルダウンからイベントを選択するのは、「ThisWorkbook」と同様です。
サンプルでは、「Sheet1」は選択セルを変える時のイベント、「Sheet2」はセルの内容(値)を変える時のイベントでメッセージが表示されます。(どの画像をクリックしても同じExcelワークブックは開きますが、InternetExproler上で開くとイベント動作が正しく処理されないことがありますので、画像を右クリックしてディスクに保存させて保存した物を開いて下さい。)