備忘録:Access ・フォームのエラー処理を一か所で行う

Accessでフォームを多数使用する場合、各フォームにエラー処理を埋め込むのは効率が悪い。
各フォームのエラー発生時のイベントにcall文を一行記載して、実際の処理は標準モジュールで行うようにすれば、エラー処理を一か所で行えるし、後々の更新も楽。


フォーム側の「エラー時」イベント

Private Sub Form_Error(DataErr As Integer, Response As Integer)
'エラー時(各フォーム)
    Call ErrorModule(DataErr, Response)    
End Sub

標準モジュール側

Public Sub ErrorModule(DataErr As Integer, Response As Integer)
'Formエラー処理(標準モジュール)
    Select Case DataErr
        Case 7787              'データ競合
            Response = acDataErrContinue
            MsgBox "他のメンバーが先にレコードを更新している為、入力を中止します。" & vbCrLf & _
                "再度入力してください。", vbInformation + vbOKOnly, "データ競合エラー"
        Case 3022              'データ重複
            Response = acDataErrContinue
            MsgBox "顧客コード もしくは 履歴コードに重複が存在するため、処理を中断します。" & vbCrLf & _
                   "Escキーで離脱できます。", , "重複エラー"
        Case 3316               '電話番号等の入力規則違反
            Response = acDataErrDisplay
        Case 3314               '必須入力欄が空
            Response = acDataErrDisplay
        Case 2113               '入力規則違反
            Response = acDataErrDisplay
        Case 2237               'ドロップダウン項目以外を入力
            Response = acDataErrDisplay
        Case 3163               '入力文字数オーバー
            Response = acDataErrDisplay
        Case Else
            MsgBox "エラー番号:" & DataErr & "が、フォーム上で発生しました。"
            Response = acDataErrDisplay     'Access標準エラーメッセージを有効
    End Select
End Sub