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