イベントプロシージャ【Access】

イベントを使ったプログラミング 08.イベントを使ったプログラミング

フォームで発生する代表的なイベントを解説します。
イベントとは「フォームを開く時」や「データを更新した時」に発生するものでイベント発生時に何を行うかをプロシージャに書きます。

ウィンドウイベント

Openイベント/Loadイベント/Activeイベント

フォームまたはレポートを開く時は下表のイベントが発生します。

イベント
発生順
イベント名プロパティシート
イベント名
Cancel説明
1Open開く時可能フォームまたはレポートが開き最初のレコードが表示される前。
2Load読み込み時不可フォームまたはレポートが開きレコードが表示されるとき
3Activeアクティブ時不可フォームまたはレポートがフォーカスを受けてアクティブになるとき。
複数のフォームが開いているとフォームを切り替えた場合も発生します。
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説明
1UnLoad読み込み解除時可能フォームまたはレポートが画面から表示されなくなる前。
2Deactivate非アクティブ時不可フォームまたはレポートがフォーカスを失うとき。
3Close閉じる時不可フォームまたはレポートが画面から表示されなくなるとき。
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説明
1BeforeUpdate更新前処理可能変更されたデータが更新される前。
2AfterUpdate更新後処理不可更新されたデータが更新された後。
Private Sub Form_BeforeInsert(Cancel As Integer)
    'データ追加時に住所に"東京都"が入力されます。
    Me.住所 = "東京都"
End Sub

BeforInsertイベント/AfterInsertイベント

データの追加前・追加後に発生するイベントです。

イベント
発生順
イベント名プロパティシート
イベント名
Cancel説明
1BeforeInsert挿入前処理可能新規レコードが追加される前。
2BeforeUpdate更新前処理可能変更されたデータが更新される前。
3AfterUpdate更新後処理不可更新されたデータが更新された後。
4AfterInsert挿入後処理不可新規レコードが追加された後。
Private Sub Form_BeforeUpdate(Cancel As Integer)
    '99歳以下でないとデータが更新されません。
    If Me.年齢 >= 100 Then
        Cancel = True
        MsgBox "99歳まで入力可能です。"
    End If
End Sub

Deleteイベント/BeforeDelConfirmイベント/AfterDelconfirmイベント

データの削除前・削除後に発生するイベントです。

イベント
発生順
イベント名プロパティシート
イベント名
Cancel説明
1Deleteレコード削除時可能レコードが削除される前。
複数レコードを削除した時はレコード数分のイベントが発生します。
2BeforeDelConfirm削除前確認不可削除確認ダイアログ表示前。
3AfterDelconfirm削除後確認不可レコードが削除された後。
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イベント

キー入力時に発生するイベントです。

イベント
発生順
イベント名プロパティシート
イベント名
説明
1KeyDownキークリック時キーを押したとき。
2KeyPressキー入力時ANSI文字コードに対応するキーが押されたとき。
3Change変更時コントロールの内容が変化した時。
4KeyUpキー解放時キーを離したとき。
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

サンプルコードを実行すると下図のように日時を毎秒表示します。

次はVisual Basic Editor(VBE)の操作【Access/Excel】です。

コメント

タイトルとURLをコピーしました