あるオブジェクトの 1 つのコントロールから別のコントロールへの移動といった 1 つのアクションにより、複数の異なるイベントが、特定の順序でトリガーされる場合があります。 マクロまたはイベント プロシージャが実行される方法とタイミングに影響する可能性があるため、イベントが、いつ、どのような順序で発生するかを理解しておくことが重要です。 たとえば、特定の順序で実行する必要のある 2 つのイベント プロシージャがある場合、イベント プロシージャが関連付けられているイベントも同じ順序で発生する必要があります。
この記事の内容
フォーム上のコントロールのイベントの順序
フォーカスをコントロールに移動して、コントロールのデータを変更したり更新したりすると、フォームのコントロールに対するイベントが発生します。
注: Microsoft Office Access で Visual Basic エディターに表示されるイベント名は、プロパティ シートおよびマクロ ビルダーに表示されるイベント名と少し違います。 たとえば、フォームのプロパティ シートおよびマクロ ビルダーに [フォーカス取得後] という名前で表示されるイベントは、Visual Basic エディターでは GotFocus と表示されます。 この記事の例では、Visual Basic for Applications (VBA) の形式のイベント名を使います。
コントロールへのフォーカスの移動
フォームのコントロールにフォーカスを移動すると (たとえば、アクティブなコントロールが 1 つ以上含まれるフォームを開いたり、フォーカスを同じフォームの別のコントロールに移動したりして)、Enter イベントと GotFocus イベントがこの順序で発生します。
「GotFocus 」と入力します
フォームを開くと、フォームを開くアクションに関連付けられているイベント (Open、Activate、Current など) の後で、次のように、Enter イベントと GotFocus イベントが発生します。
Open (form) Activate (form) Current (form) Enter (control) GotFocus (control)
フォームのコントロールがフォーカスを失うと (たとえば、アクティブなコントロールが 1 つ以上含まれるフォームを閉じたり、同じフォームの別のコントロールに移動したりして)、Exit イベントと LostFocus イベントが次の順序で発生します。
LostFocus 終了
フォームを閉じると、フォームを閉じるアクションに関連付けられているイベント (Unload、Deactivate、Close など) の前に、次のように、Exit イベントと LostFocus イベントが発生します。
Exit (control) LostFocus (control) Unload (form) Deactivate (form) Close (form)
コントロール内のデータの変更と更新
フォームのコントロールのデータを入力または変更した後、別のコントロールにフォーカスを移動すると、BeforeUpdate イベントと AfterUpdate イベントが発生します。
BeforeUpdate Afte rUpdate
BeforeUpdate および AfterUpdate イベントの後で、値が変化したコントロールに対する Exit イベントと LostFocus イベントが発生します。
BeforeUpdate AfterUpdate Exit LostFocus
テキスト ボックスのテキストまたはコンボ ボックスのテキスト ボックス セクションのテキストを変更すると、Change イベントが発生します。 このイベントはコントロールの内容が変化すると常に、別のコントロールまたはレコードにフォーカスが移動する前に発生します (したがって、BeforeUpdate および AfterUpdate イベントが発生する前になります)。 テキスト ボックスまたはコンボ ボックスのテキスト ボックス セクションでキーが押されるたびに、次のイベント シーケンスが発生します。
KeyDown KeyPress ダーティ 変更 KeyUp
コンボ ボックスに入力された値がコンボ ボックスの一覧にない場合、別のコントロールまたはレコードへのフォーカスの移動が試行された後に、NotInList イベントが発生します。 NotInList イベントは、コンボ ボックスのキーボード イベントと Change イベントの後、他のコントロールまたはフォームに対するイベントの前に、発生します。 コンボ ボックスの LimitToList プロパティが Yes に設定されている場合、NotInList イベントの直後にフォームの Error イベントが発生します。
KeyDown KeyPress ダーティ 変更 KeyUp NotInList 0 エラー
フォーム上のレコードのイベントの順序
フォーカスを別のレコードに移動した場合、レコードのデータを更新した場合、既存のレコードを削除した場合、または新しいレコードを作成した場合に、フォームのレコードに対するイベントが発生します。
レコードへのフォーカスの移動と、レコードのデータの更新
フォームの既存のレコードにフォーカスを移動し、レコードのデータを入力または変更した後、フォーカスを別のレコードに移動すると、フォームに対して次のイベント シーケンスが発生します。
Current (form) BeforeUpdate (フォーム) AfterUpdate (フォーム) Current (form)
データが変化したレコードから別のレコードに移動すると、次のレコードに入る前に、フォーカスがあるコントロールに対して Exit および LostFocus イベントが発生します。 これらのイベントは、次のように、フォームの BeforeUpdate および AfterUpdate イベントの後で発生します。
BeforeUpdate (フォーム) AfterUpdate (フォーム) Exit (control) LostFocus (control) Current (form)
フォームのコントロールの間でフォーカスを移動すると、コントロールごとにイベントが発生します。 たとえば、以下の操作を行うと、それに対応するイベント シーケンスが発生します。
-
フォームを開き、コントロール内のデータを変更します。
Current (form) Enter (control) GotFocus (control) BeforeUpdate (control) AfterUpdate (control)
-
フォーカスを別のコントロールに移動します。
Exit (control1) LostFocus (control1) Enter (control2) GotFocus (control2)
-
フォーカスを別のレコードに移動します。
BeforeUpdate (form) AfterUpdate (form) Exit (control2) LostFocus (control2) Current (form)
レコードの削除
レコードを削除すると、フォームに対して次のイベントが発生し、Microsoft Office Access には削除の確認を求めるダイアログ ボックスが表示されます。
BeforeDelConfirm AfterDelConfirm 削除する
Delete イベントをキャンセルした場合、BeforeDelConfirm および AfterDelConfirm イベントは発生せず、ダイアログ ボックスは表示されません。
新しいレコードの作成
フォームの新しい (空の) レコードにフォーカスを移動し、コントロールにデータを入力して新しいレコードを作成すると、次のイベント シーケンスが発生します。
現在の (フォーム) Enter (control) GotFocus (control) BeforeInsert (フォーム) AfterInsert (フォーム)
BeforeInsert (form) イベントは、コントロールの入力を開始するとすぐにトリガーされます。 AfterInsert (フォーム) イベントは、レコードを終了した後にトリガーされます。
フォームのコントロールおよび新しいレコードに対する BeforeUpdate イベントと AfterUpdate イベントは、BeforeInsert イベントの前、かつ AfterInsert イベントの後に発生します。
フォームとサブフォームのイベントの順序
フォームを開いたり閉じたりしたとき、フォーム間を移動したとき、フォームまたはサブフォームのデータを操作したときに、フォームに対するイベントが発生します。
フォームを開く、閉じる
フォームを開くと、フォームに対して次のイベント シーケンスが発生します。
読み込み サイズ変更 現在 アクティブ化 を開く
フォームにアクティブなコントロールがない場合、Activate イベントの後、かつ Current イベントの前に、フォームに対して GotFocus イベントが発生します。
フォームを閉じると、フォームに対して次のイベント シーケンスが発生します。
アンロード 閉じる 非アクティブ化
フォームにアクティブなコントロールがない場合、Unload イベントの後、かつ Deactivate イベントの前に、フォームに対して LostFocus イベントが発生します。
フォーム間の移動
開いている 2 つのフォームの間で切り替えを行うと、第 1 のフォームに対しては Deactivate イベントが発生し、第 2 のフォームに対しては Activate イベントが発生します。
非アクティブ化 (form1) アクティブ化 (form2)
フォームに対する Deactivate イベントは、フォームから Access の別のオブジェクト タブに切り替えた場合にも発生します。 ただし、ダイアログ ボックス、PopUp プロパティが Yes に設定されているフォーム、または別のプログラムのウィンドウに切り替えた場合は、Deactivate イベントは発生しません。
注: OpenForm アクションを実行してフォームにフォーカスを移動したとしても、そのフォームが既に開いていた場合は、Open イベントは発生しません。
フォームのデータの操作
フォームのレコード間を移動してデータを変更すると、フォームおよびコントロールのイベントが発生します。 たとえば、最初にフォームを開くと、次のイベント シーケンスが発生します。
Open (form) Load (form) Resize (form) Activate (form) Current (form) Enter (control)0 GotFocus (control)
同様に、フォームを閉じると、次のイベント シーケンスが発生します。
Exit (control) LostFocus (control) Unload (form) Deactivate (form) Close (form)
コントロールのデータを変更した場合は、コントロールに対する Exit イベントの前に、コントロールとフォームの両方に対して BeforeUpdate および AfterUpdate イベントが発生します。
サブフォームの操作
サブフォームを含むフォームを開くと、メイン フォームの前に、サブフォームとそのレコードが読み込まれます。 つまり、サブフォームとそのコントロールに対するイベント (Open、Current、Enter、GotFocus など) は、フォームに対するイベントの前に発生します。 ただし、Activate イベントはサブフォームに対しては発生しません。 したがって、メイン フォームを開くと、メイン フォームに対する Activate イベントだけがトリガーされます。
同様に、サブフォームを含むフォームを閉じると、フォームの後でサブフォームとそのレコードがアンロードされます。 Deactivate イベントは、サブフォームに対しては発生しません。 したがって、メイン フォームを閉じると、メイン フォームに対する Deactivate イベントだけがトリガーされます。 コントロール、フォーム、サブフォームのイベントは、次の順序で発生します。
-
サブフォームのコントロールのイベント (Exit、LostFocus など)
-
フォームのコントロールのイベント (サブフォームのコントロールを含む)
-
フォームのイベント (Deactivate、Close など)
-
サブフォームのイベント
注: サブフォームのイベントはメイン フォームが閉じられた後で発生するので、特定のイベント (サブフォームのイベントからの、メイン フォームを閉じる操作のキャンセルなど) は発生しません。 この種の検証テストは、メイン フォームのイベントに移動することが必要になる場合があります。
キーストロークとマウス クリックのイベントの順序
フォームまたはコントロールにフォーカスがある間に、キーが押されるか、キーストロークが送信されると、フォームおよびコントロールに対するキーボード イベントが発生します。 マウス ポインターでフォーム、セクション、またはコントロールをポイントして、マウス ボタンをクリックすると、フォーム、フォーム セクション、およびフォーム上のコントロールに対するマウス イベントが発生します。 フォーム、セクション、またはコントロール上にマウス ポインターを移動した場合も、マウス イベントが発生します。
キーボード イベント
フォームのコントロールにフォーカスがあるときにキーを押して離すと (または、SendKeys アクションまたはステートメントを使用してキーストロークを送信すると)、以下のイベント シーケンスが発生します。
KeyDown KeyPress KeyUp
キーを押して離すか、 ANSI 文字セットでキーストロークを送信すると、 KeyDown、 KeyPress、 KeyUp イベントがすべて発生します。 ANSI キーを長押しすると、キーを離すまで KeyDown イベントと KeyPress イベントが繰り返し (KeyDown、KeyPress、KeyDown、KeyPress など) 繰り返し発生します。KeyUp イベントが発生します。
ANSI 以外のキーを押して離すと、 KeyDown イベントと KeyUp イベントが発生します。 ANSI 以外のキーを長押しすると、キーを離すまで KeyDown イベントが繰り返し発生し、 KeyUp イベントが発生します。
キーを押すことによってコントロールに対して別のイベントがトリガーされる場合、そのイベントは KeyPress イベントの後、KeyUp イベントの前に発生します。 たとえば、キーストロークによってテキスト ボックス内のテキストが変化すると、Change イベントがトリガーされ、次のイベント シーケンスが発生します。
KeyDown KeyPress KeyUp 変更
キーストロークによってフォーカスがあるコントロールから別のコントロールに移動する場合、第 1 のコントロールに対しては KeyDown イベントが発生し、第 2 のコントロールに対しては KeyPress および KeyUp イベントが発生します。 たとえば、コントロールのデータを変更してから TAB キーを押して次のコントロールに移動した場合は、次のイベント シーケンスが発生します。
-
第 1 のコントロール:
KeyDown BeforeUpdate AfterUpdate Exit LostFocus
-
第 2 のコントロール:
「GotFocus KeyPress KeyUp」と入力
マウス イベント
マウス ポインターがフォーム上のコントロールをポイントしている状態で、マウス ボタンをクリックして離すと、コントロールに対して次のイベント シーケンスが発生します。
MouseDown MouseUp クリック
あるコントロールにフォーカスがある場合に、別のコントロールをクリックしてこの第 2 のコントロールにフォーカスを移動すると、次のイベント シーケンスが発生します。
-
第 1 のコントロール:
LostFocus 終了
-
第 2 のコントロール:
「GotFocus #x2 MouseDown MouseUp」と入力 クリックします
別のレコードに移動してからコントロールをクリックすると、コントロールに対する Enter イベントの前に、フォームに対する Current イベントも発生します。
コントロールをダブルクリックすると、Click イベントと DblClick イベントの両方が発生します。 たとえば、コマンド ボタン以外のコントロールをダブルクリックすると、コントロールに対して次のイベント シーケンスが発生します。
MouseD own MouseUp クリック DblClick MouseUp
コマンド ボタンをダブルクリックすると、前記のイベント シーケンスが発生した後で、2 番目の Click イベントが発生します。
フォーム、セクション、またはコントロールの上にマウス ポインターを移動すると、フォーム、セクション、またはコントロールに対する MouseMove イベントが発生します。 このイベントは、他のマウス イベントには依存していません。
レポートとレポート セクションのイベントの順序
レポートを開いてレポートを印刷またはプレビューすると、またはレポートを閉じると、レポートおよびレポート セクションに対するイベントが発生します。
レポートのイベント
レポートを開いてレポートを印刷またはプレビューした後、レポートを閉じるか、Access の別のオブジェクト タブに移動すると、レポートに対して以下のイベント シーケンスが発生します。
アクティブ化 開く 非アクティブ化を閉じる
開いている 2 つのレポートの間で切り替えを行うと、第 1 のレポートに対しては Deactivate イベントが発生し、第 2 のレポートに対しては Activate イベントが発生します。
非アクティブ化 (report1) アクティブ化 (report2)
レポートに対する Deactivate イベントは、レポートから Access の別のオブジェクト タブに切り替えたときも発生します。 ただし、ダイアログ ボックス、PopUp プロパティが Yes に設定されているフォーム、または別のプログラムのウィンドウに切り替えた場合は、Deactivate イベントは発生しません。
クエリに基づくレポートを開くと、Access は、基になっているクエリを実行する前に、レポートに対する Open イベントをトリガーします。 これを利用すると、Open イベントに応答するマクロまたはイベント プロシージャを使用して、レポートの条件を設定できます。 たとえば、マクロまたはイベント プロシージャで、レポートの条件を入力するカスタム ダイアログ ボックスを開くことができます。
レポート セクションのイベント
レポートを印刷またはプレビューすると、レポートに対する Open および Activate イベントの後、レポートの Close または Deactivate イベントの前に、レポート セクションに対する Format および Print イベントが発生します。
開く (レポート) アクティブ化 (レポート) 形式 (レポート セクション) 印刷 (レポート セクション) 閉じる (レポート) 非アクティブ化 (レポート)
セキュリティ レポート ビューを使用して、 レポートのユーザー フィルター処理を有効にすることができます。 ただし、印刷プレビューとは異なり、任意のセクションの [書式 ] イベントと [印刷 ] イベントはレポート ビューでは発生しません。 これは、これらのイベント内のコントロール (ラベル キャプション、表示状態、条件付き書式、コントロールのサイズ変更など) に表示される VBA 関数の結果とユーザー定義プロシージャにも適用されます。 そのため、このイベントのコードを使用して機密データの書式設定、非表示、または印刷を行わないでください。これは公開される可能性があります。 AllowReportView プロパティを No に設定して、データを事前にフィルター処理するか、レポート プレビューを無効にすることをお勧めします。
さらに、書式設定の間またはその後、ただし Print イベントの前に、以下のイベントが発生する場合があります。
-
レポートの書式設定の間に Access が前のセクションに戻ると、Retreat イベントが発生します。
-
レポートによって表示されるレコードがない場合は、NoData イベントが発生します。
-
書式設定の後、印刷の前に、Page イベントが発生します。 このイベントを使って、印刷されるレポートの外観をカスタマイズできます。