特定のブックが選択されたとき、ブック内のシートが選択されたとき、セルの値が変更されたとき、ダブルクリックが発生したとき、シートが追加されたときなどに、マクロ/ VBAスニペットを実行することをお勧めします。ワークブックイベントハンドラ。イベントハンドラーは、特定のイベントが発生するたびにVBAコードを実行するのに役立ちます。

この記事では、各ワークブックイベントハンドラーについて簡単に学習します。

ワークブックイベントハンドラーとは何ですか?ワークブックイベントハンドラーは、ワークブックに対してローカルなサブルーチンです。

これらのコードは、ブックのコンポーネントでのみ機能します。それはワークブック自体であり、シートと範囲です。

ワークブックイベントハンドラコードをどこに書くか?

ブックイベントは、ブックオブジェクトにのみ書き込まれます。通常のモジュールでブックイベントを作成した場合、エラーは発生しませんが、機能しません。

ブックオブジェクトに書き込む。それをダブルクリックするか、右クリックしてビューコードをクリックします。コード書き込みエリアが表示されます。

ワークブックの特定のイベントのコードを書く方法は?

これで、編集モードの場合、左上隅のドロップダウンメニューに[全般]が表示されます。ドロップダウンをクリックして、ブックを選択します。右上隅のドロップダウンに、すべてのイベントが表示されます。必要なものを選択すると、そのイベントのスケルトンコードが作成されます。

各イベントには固定のプロシージャ名があります。これらは、workbook_で始まる予約済みのサブルーチン名です。他のサブルーチンに使用することはできません(使用できますが、通常のサブルーチンになります)。

重要:そのリストの各サブルーチンは、指定されたイベントで実行されます。

_ 1つのタイプのワークブックイベントプロシージャは、1つのワークブックに1回だけ書き込むことができます。 1つのワークブックに2つの同じイベント処理手順を記述すると、エラーが発生し、いずれも実行されません。

もちろん、エラーはあいまいなサブルーチンになります。_

それぞれのイベントについて簡単に学びましょう。

  1. Workbook_SheetChange(ByVal Sh As Object、ByVal Target As Range)イベントこのイベントは、含まれているワークシートに変更を加えたときにトリガーされます(フォーマットは除外されます)。シートに変更が加えられた場合に何かを実行したい場合、コードは次のようになります。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

'do something

Msgbox "done something"

End Sub

「Sh」は常にアクティブシートです。 「ターゲット」は常にアクティブセルです。

別の例:A1が変更された場合は、日付と時刻をCel、prlB1に入力することをお勧めします。その場合、workbook_sheetchangeイベントを使用します。コードは次のようになります:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If Target.Address = "$A$1" Then

Range("B1").Value2 = Format(Now(), "hh:mm:ss")

End If

End Sub

「sh」オブジェクトを指定していないため、これはすべてのシートのセルA1のみを対象とします。

  1. Workbook_Activate()イベントこのイベントは、ブックを含むイベントコードがアクティブ化されたときにトリガーされます。このイベントのスケルトンコードは次のとおりです。

Private Sub Workbook_Activate()

End Sub

簡単な例は、選択されたときにブック名を表示することです。

Private Sub Workbook_Activate()

MsgBox "You are on workbook " & Activeworkbook.Name

End Sub

このコードを含むワークブックにアクセスするとすぐに、イベントが実行され、「ワークブック名​​を使用しています」というメッセージが表示されます(私の場合はsheet2です)。

  1. Workbook_Open()イベントこれは、ブックが開いたらすぐにマクロを実行する方法について最もよく聞かれる質問の1つです。これが答えです。このワークブックイベントは、ワークブックが開かれるとすぐに実行されます。 Workbook_Activate()とは異なり、このコードは1回だけ実行され、アクティブ化されるたびに実行されるわけではありません。

Private Sub Workbook_Open()

'your code

'

End Sub

以下の例のWorkbook_Openイベントは、ワークブックを含むコードを開くと、ウェルカムメッセージをポップアップするだけです。

Private Sub Workbook_Open()

MsgBox "Welcome to the Master File"

End Sub
  1. Workbook_Deactivate()イベントこのイベントは、ブックを含むコードを離れるときにトリガーされます。つまり、ブックを切り替えるときにシートを非表示にするなどの操作を行う場合は、このVBAイベントを使用します。構文は次のとおりです。

Private Sub Workbook_Deactivate()

'your code

'

End Sub

以下の例のWorkbook_Deativateイベントは、このシートを離れるときに、マスターシートを離れたというメッセージをポップアップするだけです。

Private Sub Workbook_Deactivate()

MsgBox "You Left The Master Sheet"

End Sub
  1. Workbook_BeforeClose()イベントこのイベントは、シートを含むVBAイベントの削除を確認したときにトリガーされます。構文は単純です:

Private Sub Workbook_BeforeClose(Cancel as Boolean)

End Sub

ブックを開いたままにしておきたい場合は、キャンセルをtrueに設定できます。

以下のコードは、間もなく終了するブックの内容を保存するかどうかを尋ねます。

Private Sub Workbook_BeforeClose(Cancel as Boolean)

ans = MsgBox("Do you want to save the content of this workbook?", vbYesNo)

If ans = True Then

thisworkbook.save

End If

End Sub
  1. Workbook_BeforeSave(ByVal SaveAsUI As Boolean、Cancel As Boolean)イベントこのイベントは、ブックが保存される前にトリガーされます。構文は単純です:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

(VBAではなく)ブックに変更があった場合、SaveAsUIはTrueに設定されます。

ブックを未保存のままにしておきたい場合は、キャンセルをtrueに設定できます。

以下のコードは、保存しようとしているブックの内容を保存するかどうかを尋ねます。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean)

ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo)

If ans = False Then

Cancel = True

End If

End Sub
  1. Workbook_BeforeSave(ByVal SaveAsUI As Boolean、Cancel As Boolean)イベントこのイベントは、ブックが保存される前にトリガーされます。構文は単純です:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

(VBAではなく)ブックに変更があった場合、SaveAsUIはTrueに設定されます。

ブックを未保存のままにしておきたい場合は、キャンセルをtrueに設定できます。

以下のコードは、保存しようとしているブックの内容を保存するかどうかを尋ねます。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean)

ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo)

If ans = False Then

Cancel = True

End If

End Sub
  1. Workbook_NewSheet(ByVal Sh As Object)イベントこのイベントは、ブックに新しいシートを追加したときに発生します。構文は単純です:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

End Sub

Shはシートオブジェクトです。タイプは実際にはコアオブジェクトであるため、チャートシート、マクロシート、またはダイアログシートを追加しても、イベントは引き続き機能します。

以下のコードは、新しく追加されたシートの名前を追加して表示します。

Private Sub Workbook_NewSheet(ByVal Sh As Object)

MsgBox "You added a new sheet. " & Sh.Name

End Sub

ブックオブジェクトのイベントは他にもたくさんあります。ここでそれらすべてについて議論することはできません。特定のイベントについて知りたい場合は、以下のコメントセクションで質問してください。この記事でワークブックイベントの基本を説明できたと思います。以下のコメントセクションでお役に立てば幸いです。

関連記事:

link:/ Tips-using-worksheet-change-event-to-run-macro-when-any-change-is-made [ワークシート変更イベントを使用して変更が行われたときにマクロを実行する] |したがって、シートが更新されるたびにマクロを実行するには、VBAのワークシートイベントを使用します。

link:/ events-in-vba-run-macro-if-any-change-made-on-sheet-range [指定された範囲のシートに変更が加えられた場合はマクロを実行] |指定した範囲の値が変更されたときにマクロコードを実行するには、このVBAコードを使用します。指定された範囲で行われた変更を検出し、イベントを発生させます。

link:/ events-in-vba-simplest-vba-code-to-highlight-current-row-and-column-using [現在の行と列を強調表示する最も簡単なVBAコード] |この小さなVBAスニペットを使用して、シートの現在の行と列を強調表示します。

人気の記事:

link:/ keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [生産性を高めるための50のExcelショートカット] |あなたの仕事をより速くしてください。これらの50のショートカットにより、Excelでの作業がさらに高速になります。

link:/ forms-and-functions-introduction-of-vlookup-function [ExcelのVLOOKUP関数] |これは、さまざまな範囲やシートから値を検索するために使用される、Excelの最も使用され人気のある関数の1つです。 link:/ Tips-countif-in-microsoft-excel [COUNTIF in Excel 2016] |この驚くべき関数を使用して、条件付きの値をカウントします。特定の値をカウントするためにデータをフィルタリングする必要はありません。

ダッシュボードを準備するには、Countif関数が不可欠です。

link:/ excel-formula-and-function-excel-sumif-function [ExcelでSUMIF関数を使用する方法] |これは、ダッシュボードのもう1つの重要な機能です。これは、特定の条件で値を合計するのに役立ちます。