VBA イベントのキャンセル [VBA]
ACCESSは、ユーザーの操作やACCESSの処理によって起きるイベントによって、処理が実行されています。
様々なイベントがありますが、一部のイベントは、VBAによってイベントの処理を取り消すことができます。
具体的にどんなことなのかは、以下の通り。
フォームが閉じるときの処理を、キャンセルする例です。
画面にコマンドボタンを配置し、クリックイベントに以下のコードを記述します。
Private Sub cmdClose_Click() On Error Resume Next DoCmd.Close acForm, Me.Name On Error GoTo 0 End Sub
次に、フォームの「読み込み解除時」イベントに、以下のコードを記述します。
Private Sub Form_Unload(Cancel As Integer) If MsgBox("フォームを閉じますか?", vbYesNo) = vbNo Then Cancel = True Exit Sub End If End Sub
閉じるボタンをクリックすると、下図のメッセージボックスが表示されます。
「いいえ」をクリックすると、DoCmd.Closeでフォームを閉じる処理が実行されたのですが、Cancel = Trueが設定されたことにより、フォームを閉じる処理が取り消されます。
また、配置したコマンドボタンをクリックした時以外でも、Unloadイベントが発生した場合、このメッセージが表示されます。例えば、フォーム右上の「×」ボタンでフォームを閉じる時などです。
フォームが閉じられる際に起こる、「読み込み解除時」イベントで、イベントをキャンセルすることで、フォームが閉じられないようにすることができます。
これが、イベントのキャンセルです。
取り消し可能なイベントは、イベントプロシージャの引数に「Cancel As Integer」が記述されています。
ちなみに、DoCmd.Closeの前に、On Error Resume Nextを指定しているのは、イベントがキャンセルされた場合、DoCmd.Closeがエラーになってしまうからです。
エラー処理をしていないと、メッセージボックスの「いいえ」をクリックした後、
と言うエラーメッセージが表示され、止まってしまいます。
・DoCmd.CancelEventについて
DoCmd.CancelEventでも、同様にイベントのキャンセルが行えます。
上記の例を、DoCmd.CancelEventで記述すると、以下のようになります。
Private Sub Form_Unload(Cancel As Integer) If MsgBox("フォームを閉じますか?", vbYesNo) = vbNo Then DoCmd.CancelEvent Exit Sub End If End Sub
DoCmd.CancelEventはACCESSの仕組み、Cancel = TrueによるイベントのキャンセルはVBの仕組みです。
記述量はたいして差がありませんが、処理面では、DoCmdのメソッドを呼ぶより、Cancel = Trueを設定する方が、シンプルです。
イベントのキャンセルでは、Cancel = Trueを記述するのが一般的だと思います。
コメント 0