そのプロシージャを終わらせるにあたって実行しなければいけない処理というのがある場合があります。たとえば、データベースへの接続オブジェクトのクローズ処理だったり、戻り値の設定をすることだったり。ただ、エラーが発生してしまい途中でエラー処理に飛ばされてしまうことがあります。
そのような場合、エラー処理を行ったあとにResumeステートメントで終了処理に飛ばしてあげます。
例
下記の例では、マウスカーソルを砂時計に変更し、エラー発生時でも必ずマウスカーソルを元に戻すようにしています。Public Sub ExitTest()
On Error GoTo Err_Trap
'マウスを砂時計に切り替える
DoCmd.Hourglass True
Dim a As Long
a = 30 / 0
MsgBox "a = " & a
Exit_Trap:
'終了処理
'マウスを元に戻す
DoCmd.Hourglass False
Exit Sub
Err_Trap:
MsgBox "エラー番号:" & Err.Number & vbCrLf & vbCrLf & Err.Description, vbExclamation, "エラー"
Resume Exit_Trap
End Sub
ポイントは、Err_Trapラベル後のメッセージボックスを表示したあとにResumeステートメントでExit_Trapラベルに処理を飛ばしているところです。Resumeステートメントでラベルを指定すると、そのラベルに処理を移動できるようになっています。
スポンサーリンク