【Access】AccessVBAでエラー処理(On Error GoTo Error)を入れる

AccessのVBAに必ずエラー処理を入れていますか?

エラー処理とは「On Error GoTo Error」のことです。

関数の中でエラーが発生したらキャッチしてメッセージを出すものです。
このエラー処理を入れると関数内の途中でエラーが発生すると
処理をスキップしてエラーメッセージを表示します。
もし、このエラー処理を入れていないとどうなるのか?というと
おそらくエラーメッセージが表示されてプログラムが途中で中断すると思います。

エラー処理を入れるメリットは、プログラムが途中で中断(中途半端に中断)
することなくメッセージだけ表示して終わらすことができることです。

 

'Rem -------------------------------------------------------
'Rem     関数名   : funCheckInput
'Rem     処理内容 : 入力チェックを行います
'Rem     引  数  : なし
'Rem     戻り値  : true(正常)/false(異常)
'Rem -------------------------------------------------------
Private Function funCheckInput() As Boolean

On Error GoTo Error

    funCheckInput = False
    
    '=================
    ' 必須チェック
    '=================
    ' 受付日
    If Me.txt受付日.value = "" Or IsNull(Me.txt受付日.value) Then
        MsgBox "受付日を入力してください。", vbExclamation + vbOKOnly, "入力確認"
        Me.txt受付日.SetFocus
        Exit Function
    End If
    
    ' 勤務区分
    If Me.cbo勤務区分.value = "" Or IsNull(Me.cbo勤務区分.value) Then
        MsgBox "勤務区分を選択してください。", vbExclamation + vbOKOnly, "入力確認"
        Me.cbo勤務区分.SetFocus
        Exit Function
    End If
    
    ' 年齢
    If Me.txt年齢.value = "" Or IsNull(Me.txt年齢.value) Then
        MsgBox "年齢を入力してください。", vbExclamation + vbOKOnly, "入力確認"
        Me.txt年齢.SetFocus
        Exit Function
    End If
    

    funCheckInput = True
    
Exit Function
Error:
    MsgBox "エラーが発生しました。エラー内容:" & ERR.Description & Chr$(10), vbCritical, C_MSG_TITLE
End Function

 

On Error GoTo Errorを入れることにより
途中でエラーが発生した際に「Error:」にジャンプしメッセージを表示します。

もしこのエラー処理
On Error GoTo Error

On Error Resume Nextになっているとどうなるのか?というと
Resume Nextにするとそのまま次の行へいくのでエラーと見た目わからず進みます。

私はこの「Resume Next」があまり好きではありません。
なぜなら、これを使うと不具合がさっぱりわからなくなるからです。
パット見動いているように見えるけれど、実は途中でエラーになって更新処理が出来ていなかった
というのが最近修正したソースコードの改修でありました。

「Resume Next」は使う事ありますが結構慎重に使わないと危険です。
「On Error GoTo Error」の「Error」は何でもOKです

「On Error GoTo Error1」でも「On Error GoTo Error2」でも「On Error GoTo EXCEPTION」でも
ラベルを定義します。そこで
Error1:
Error2:
EXCEPTION:

を用意しておけば良いのです。

VBA作成時は必ずこのエラー処理を入れるようにしたほうが良いです。

コメント

タイトルとURLをコピーしました