フォームで発生する代表的なイベントを解説します。
イベントとは「フォームを開く時」や「データを更新した時」に発生するものでイベント発生時に何を行うかをプロシージャに書きます。
ウィンドウイベント
Openイベント/Loadイベント/Activeイベント
フォームまたはレポートを開く時は下表のイベントが発生します。
イベント 発生順 | イベント名 | プロパティシート イベント名 | Cancel | 説明 |
---|---|---|---|---|
1 | Open | 開く時 | 可能 | フォームまたはレポートが開き最初のレコードが表示される前。 |
2 | Load | 読み込み時 | 不可 | フォームまたはレポートが開きレコードが表示されるとき |
3 | Active | アクティブ時 | 不可 | フォームまたはレポートがフォーカスを受けてアクティブになるとき。 複数のフォームが開いているとフォームを切り替えた場合も発生します。 |
Private Sub Form_Open(Cancel As Integer) Dim Pass As String Pass = InputBox("パスワードを入力") If Pass = "pass" Then MsgBox "正しくパスワードが入力されました。" Else MsgBox "パスワードが間違っています。" Cancel = True End If End Sub
UnLoadイベント/Deactiveイベント/Closeイベント
フォームまたはレポートを閉じるときは下表のイベントが発生します。
イベント 発生順 | イベント名 | プロパティシート イベント名 | Cancel | 説明 |
---|---|---|---|---|
1 | UnLoad | 読み込み解除時 | 可能 | フォームまたはレポートが画面から表示されなくなる前。 |
2 | Deactivate | 非アクティブ時 | 不可 | フォームまたはレポートがフォーカスを失うとき。 |
3 | Close | 閉じる時 | 不可 | フォームまたはレポートが画面から表示されなくなるとき。 |
Private Sub cmdClose_Click() '「フォームを閉じる」ボタンの処理 Me.lblFlg.Caption = "1" DoCmd.Close End Sub Private Sub Form_Unload(Cancel As Integer) '「フォームを閉じるボタン」(cmdClose)をクリックしないと終了できない。 If Me.lblFlg.Caption <> "1" Then MsgBox "フォームを閉じるには「フォームを閉じるボタン」をクリックします。" Cancel = True End If End Sub
データイベント
BeforeUpdateイベント/AfterUpdateイベント
データの更新前・更新後に発生するイベントです。
イベント 発生順 | イベント名 | プロパティシート イベント名 | Cancel | 説明 |
---|---|---|---|---|
1 | BeforeUpdate | 更新前処理 | 可能 | 変更されたデータが更新される前。 |
2 | AfterUpdate | 更新後処理 | 不可 | 更新されたデータが更新された後。 |
Private Sub Form_BeforeInsert(Cancel As Integer)
'データ追加時に住所に"東京都"が入力されます。
Me.住所 = "東京都"
End Sub
BeforInsertイベント/AfterInsertイベント
データの追加前・追加後に発生するイベントです。
イベント 発生順 | イベント名 | プロパティシート イベント名 | Cancel | 説明 |
---|---|---|---|---|
1 | BeforeInsert | 挿入前処理 | 可能 | 新規レコードが追加される前。 |
2 | BeforeUpdate | 更新前処理 | 可能 | 変更されたデータが更新される前。 |
3 | AfterUpdate | 更新後処理 | 不可 | 更新されたデータが更新された後。 |
4 | AfterInsert | 挿入後処理 | 不可 | 新規レコードが追加された後。 |
Private Sub Form_BeforeUpdate(Cancel As Integer)
'99歳以下でないとデータが更新されません。
If Me.年齢 >= 100 Then
Cancel = True
MsgBox "99歳まで入力可能です。"
End If
End Sub
Deleteイベント/BeforeDelConfirmイベント/AfterDelconfirmイベント
データの削除前・削除後に発生するイベントです。
イベント 発生順 | イベント名 | プロパティシート イベント名 | Cancel | 説明 |
---|---|---|---|---|
1 | Delete | レコード削除時 | 可能 | レコードが削除される前。 複数レコードを削除した時はレコード数分のイベントが発生します。 |
2 | BeforeDelConfirm | 削除前確認 | 不可 | 削除確認ダイアログ表示前。 |
3 | AfterDelconfirm | 削除後確認 | 不可 | レコードが削除された後。 |
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer) '削除確認します。 Dim Msg As String Msg = "選択したデータを削除してもいいですか?" If MsgBox(Msg, vbOKCancel + vbInformation) = vbCancel Then Cancel = True Else 'レコードを削除する場合はシステムメッセージを非表示にする。 DoCmd.SetWarnings False End If End Sub Private Sub Form_AfterDelConfirm(Status As Integer) 'レコードを削除する場合はシステムメッセージを表示する。 If Status = acDeleteOK Then DoCmd.SetWarnings True End If End Sub
キーボード/マウスイベント
KeyDownイベント/KeyPressイベント/KeyUpイベント/Changeイベント
キー入力時に発生するイベントです。
イベント 発生順 | イベント名 | プロパティシート イベント名 | 説明 |
---|---|---|---|
1 | KeyDown | キークリック時 | キーを押したとき。 |
2 | KeyPress | キー入力時 | ANSI文字コードに対応するキーが押されたとき。 |
3 | Change | 変更時 | コントロールの内容が変化した時。 |
4 | KeyUp | キー解放時 | キーを離したとき。 |
Private Sub txtInput_KeyDown(KeyCode As Integer, Shift As Integer)
'「Z」が入力されたらキー入力を無効にします。
If KeyCode = vbKeyZ Then
MsgBox "Zは無効です。"
KeyCode = 0
Else
Me.lblKeyCnt.Caption = CInt(Me.lblKeyCnt.Caption) + 1
Me.lblKeyCode.Caption = KeyCode
End If
End Sub
Private Sub txtInput_KeyPress(KeyAscii As Integer)
Me.lblANSICnt.Caption = CInt(Me.lblANSICnt.Caption) + 1
Me.lblKeyAscii.Caption = KeyAscii
End Sub
下記フォームのテキストボックスに文字を入力するとサンプルコードが動き、KeyCodeとKeyAsciiの入力回数とコードを表示します。Zを入力すると入力が無効かされます。
Clickイベント
オブジェクトの上でマウスボタンをクリックしたときに発生します。
Private Sub cmdTest_Click() With Me.lstSample .RemoveItem 0 End With MsgBox "ボタンをクリックしました。" End Sub
その他のイベント
GotFocusイベント/Exitイベント
フォーカス取得後・喪失時に発生するイベントです。
イベント名 | プロパティシート イベント名 | 説明 |
---|---|---|
GotFocus | フォーカス取得後 | オブジェクトにフォーカスが移ったとき。 |
Exit | フォーカス喪失時 | ほかのコントロールに移る前。 |
Private Sub txt1_GotFocus() '1番目にイベント発生 MsgBox "テキスト1のGotFocus" End Sub Private Sub txt1_Exit(Cancel As Integer) '2番目にイベント発生 MsgBox "テキスト1のExit" End Sub Private Sub txt2_GotFocus() '3番目にイベント発生 MsgBox "テキスト2のGotFocus" End Sub Private Sub txt2_Exit(Cancel As Integer) '4番目にイベント発生 MsgBox "テキスト2のExit" End Sub
Timerイベント(TimerIntervalプロパティ)
一定間隔で発生するイベントです。TimerIntervalプロパティに間隔を設定します。単位はミリ秒。
プロパティシートのイベント名は「タイマー時」「タイマー間隔」。
Private Sub Form_Open(Cancel As Integer) '1秒のタイマーを設定 Me.TimerInterval = 1000 End Sub Private Sub Form_Timer() '1秒ごとに日時をフォームに表示 Me.txtClock.Caption = Now() & Space(2) & "Timerイベント" End Sub
サンプルコードを実行すると下図のように日時を毎秒表示します。
コメント