備忘録: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