Workbook クラスのイベント

よく使用するイベントは、以下です。

イベント説明
Openブックを開いたとき
BeforeClose(Cancel as Boolean)ブックを閉じる前
SheetChange(Sh as Object, Target as Range)シートのセルが変更されたとき

イベントの引数は、以下です。

引数説明
Shイベントの対象の Worksheet オブジェクトまたは Chart オブジェクト
Targetイベントの対象の Range オブジェクト
Cancelイベント操作の中止するかどうかを表すプール値

ブックを開いたときに実行するイベントハンドラーを追加する

Excel VBAのイベントハンドラーを使用するには、ThisWorkbookモジュールにコードを追加します。

以下の手順でイベントハンドラーを設定します

  1. Excelで対象のブックを開きます。
  2. Alt + F11キーを押してVBAエディタを開きます。
  3. プロジェクトエクスプローラーで「ThisWorkbook」をダブルクリックします。
  4. コードウィンドウに以下のコードを追加します。

ブックを開いたとき

' ブックを開いたときに実行されるコード
Private Sub Workbook_Open()
    MsgBox "こんにちは、世界!"
End Sub

このコードをThisWorkbookモジュールに追加すると、ブックを開いたときに「こんにちは、世界!」というメッセージボックスが表示されます。

ブックを閉じる前

' ブックを閉じる前に実行
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Sheet1.Range("A3").Value = "" Then
        MsgBox "ブックを閉じる前に A3 セルに入力してください"
        Cancel = True
    End If
End Sub

ユーザーがブックを閉じようとすると、Workbook_BeforeClose イベントがトリガーされます。
Sheet1A3 セルが空白かどうかを確認します。
A3 セルが空白の場合、メッセージボックスで「ブックを閉じる前に A3 セルに入力してください」とユーザーに通知します。
CancelTrue に設定することで、ブックの閉鎖をキャンセルします。

シートのセルが変更されたとき

' シートのセルが変更されたとき
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    MsgBox "セルが変更されました: " & Target.Address & " in sheet " & Sh.Name
End Sub

任意のシートでセルの値が変更されると、Workbook_SheetChange イベントハンドラーが呼び出されます。
変更されたセルのアドレス(Target.Address)とシートの名前(Sh.Name)を取得します。
メッセージボックスに「セルが変更されました: [セルのアドレス] in sheet [シートの名前]」というメッセージを表示します。

この記事は、以下を参照しています。

Workbookのイベントプロシージャー

https://excel-ubara.com/excelvba1/EXCELVBA424.html

Follow me!