Open イベント

Microsoft Access Visual Basic のリファレンス

Open イベント

Open イベントは、フォームが開くときに、最初のレコードが表示される前に発生します。レポートの場合、レポートがプレビューされるか印刷される前に発生します。

Private Sub object_Open(Cancel As Integer)

Object フォームまたはレポートの名前。

Cancel フォームまたはレポートを開くかどうかを設定します。引数 Cancel に True (?1) を設定すると、フォームまたはレポートを開くことがキャンセルされます。

解説

このイベントが発生したときに、マクロまたはイベント プロシージャを実行するには、"OnOpen/開く時" プロパティにマクロ名または [Event Procedure/イベント プロシージャ] を設定します。

フォームの Open イベントが発生したときにマクロやイベント プロシージャを実行すると、他のウィンドウを閉じたり、フォーカスをフォームの特定のコントロールに移動することができます。フォームやレポートを開く前または印刷する前に、マクロやイベント プロシージャを実行して、必要な情報をユーザーに入力させることもできます。たとえば、Open イベント マクロまたは Open イベント プロシージャを使って、フォームに表示するレコードを抽出するための条件や、レポートに含める日付の範囲を入力するためのカスタム ダイアログ ボックスを表示することができます。

既に開いているフォームに対しては Open イベントは発生しません。たとえば、Access の他のウィンドウから開いているフォームへ切り替える場合や、マクロで "OpenForm/フォームを開く" アクションを使って開いているフォームを手前に表示する場合などです。ただし、このような場合も Activate イベントは発生します。

クエリを基にするフォームを開いた場合は、フォームの基になるクエリが実行されてから Open イベント マクロや Open イベント プロシージャが実行されます。ただし、クエリを基にするレポートを開いた場合は Open イベント マクロや Open イベント プロシージャが実行された後で、レポートの基になるクエリが実行されます。

複数のフォームを同時に読み込むアプリケーションの場合、フォーカスが他のフォームに移動したときに、カスタム ツールバーの表示と非表示を切り替えるには、Open イベントの代わりに Deactivate イベントを使います。

Open イベントは、Load イベントよりも前に発生します。Load イベントは、フォームが開くか、またはフォームのレコードが表示されたときに発生します。

最初にフォームを開くと、次の順序でイベントが発生します。

Open → Load → Resize → Activate → Current

Close イベントは、Unload イベントの後に発生します。Unload イベントは、フォームが閉じた後で、フォームが画面から非表示になる前に発生します。

フォームを閉じると、次の順序でイベントが発生します。

Unload → Deactivate → Close

たとえば、Close イベントが発生したときに、他のウィンドウを開いたり、フォームやレポートを使用したユーザー名を入力させるダイアログ ボックスを表示することができます。

Open イベントはキャンセルできますが、Load イベントはキャンセルできません。マクロやイベント プロシージャでいずれかを使う場合には注意が必要です。たとえば、フォームの Open イベントに対するイベント プロシージャで、フォームのレコード ソースを動的に作成している場合は、表示するレコードがなければフォームを開くことをキャンセルするようにプログラミングできます。同様に、Unload イベントはキャンセルできますが、Close イベントはキャンセルできません。

マクロ

Open イベント マクロでは、"CancelEvent/イベントのキャンセル" アクションを使用して、フォームやレポートを開くことをキャンセルできます。Close では、"CancelEvent/イベントのキャンセル" アクションを使用して、Close イベントをキャンセルすることはできません。ただし、Unload イベントの発生時に実行されるマクロでは、"CancelEvent/イベントのキャンセル" アクションを使用できます。これにより、フォームを閉じることがキャンセルされます。

Open イベント マクロからコントロールを参照する場合は、最初に、該当するコントロールまたはレコードにフォーカスを移動させる必要があります。たとえば、Open イベント マクロで "SetValue/値の代入" を使用してフォーム上のコントロールの値を設定するには、最初に "GoToControl/コントロールの移動" アクションまたは "GoToRecord/レコードの移動" アクションを使用して、コントロールまたはコントロールを含むレコードにアクセスする必要があります。

使用例

次の使用例では、[No] ボタンをクリックしたときにフォームの読み込みをキャンセルします。その日の売上数値を入力したかどうかを確認するメッセージが表示され、このダイアログ ボックスの [No] をクリックすると、[今日の売上] フォームは開きません。

次の使用例の実行結果を確認するには、フォームに対し、次のイベント プロシージャを追加します。

Private Sub Form_Open(Cancel As Integer)
    Dim intReturn As Integer
    intReturn = MsgBox("今日の売上を入力しましたか?", vbYesNo)
    Select Case intReturn
        Case vbYes
            ' [今日の売上] フォームを開きます。
            DoCmd.OpenForm "今日の売上"
        Case vbNo
            MsgBox "5 時までに、今日の売上を入力してください。"
            Cancel = True                    ' Open イベントをキャンセルします。
    End Select
End Sub