So-net無料ブログ作成
検索選択

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を記述するのが一般的だと思います。



【2万円から3万円の、格安ホームページ作成サービス】

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました