
システム開発をする上で重要になってくるのがエラー処理です。エラー処理を正しく行っていないとエラーによりAccess自体を強制終了しなければいけないといったことになってしまうことがあります。
Access VBAのエラー処理は2つの方法があり、一つはエラーが起きても無視して処理を続行させる方法と、もう一つはエラーが起きたら特定の行に処理を移す方法があります。
エラーが起きても無視して処理を続行させる方法
まずは何もエラー処理してない場合です。下記のコードは0除算エラーが発生します。Public Sub ErrorResumeTest() Dim a As Long a = 30 / 0 MsgBox "a = " & a End Sub
実行するとこのように「0で除算しました。」というエラーが出てプログラムが停止してしまいます。

次はこのコードに下記のように「On Error Resume Next」ステートメントを追加してみます。
Public Sub ErrorResumeTest() On Error Resume Next Dim a As Long a = 30 / 0 MsgBox "a = " & a End Sub
実行結果

「On Error Resume Next」を追加すると、実行時エラーを無視するようになり、次のステートメントに処理を移しプログラムの実行を継続させます。
エラーが起きたら特定の行に処理を移す方法
次にエラーが起きた場合に特定の行に処理を移す方法です。下記のコードでは、「On Error GoTo」ステートメントを使ってエラーが起きた際に処理を移動させています。Public Sub ErrorGotoTest() On Error GoTo Err_Trap Dim a As Long a = 30 / 0 MsgBox "a = " & a Exit Sub Err_Trap: MsgBox "エラー番号:" & Err.Number & vbCrLf & vbCrLf & Err.Description, vbExclamation, "エラー" End SubGoToで指定した「Err_Trap」というラベルに処理を飛ばすようにしています。これによりプログラムを停止することなくエラーメッセージを表示させたりすることが出来るようになります。
また、注意してほしいのは、「Err_Trap」ラベルの前には「Exit Sub」などの終了処理を入れてください。そうしないとエラーが発生してないときもエラーメッセージが表示されてしまいます。
実行結果

スポンサーリンク