[VBA] Resumeステートメントでエラー発生時に任意の処理を行う

Pocket

ここでは、Resumeステートメントを使って、エラー発生時に任意の位置の処理を実行させる簡単なサンプルスクリプトを掲載しています。

スポンサーリンク

エラーを無視する(On Error Resume Next)

VBAでエラー発生時にエラーを無視して次の処理を継続させるには、On Error Resume Next を使ってできますが、おススメしません。

おススメしませんが、サンプルだけは掲載しておきます。「なぜ、使わないほうがいいの?」という方は是非とも使いどころを教えて頂けると幸いです。

Private Sub CommandButton1_Click()

    On Error Resume Next
    
    ' 0 除算でエラーを発生させる
    Dim dev0 As Integer
    dev0 = 10 / 0
    
    MsgBox "エラー無視してメッセージを出力"

End Sub

 

エラー発生時に特定所の処理をさせ、さらに特定の場所へ処理を飛ばす

言葉では説明がしにくいので、まずはサンプルスクリプトをご覧ください。

Private Sub CommandButton1_Click()

    ' エラー発生時に所定の処理に飛ばす
    On Error GoTo err_block
    
    ' 0 除算でエラーを発生させる
    Dim dev0 As Integer
    dev0 = 10 / 0
    
    ' この位置の処理は実行されない
exit_block:
    MsgBox "exit_block"
    ' 最終的にはここで終了
    Exit Sub

' エラー発生時はここの処理が実行される(今回は 0 除算でエラー)
err_block:
    MsgBox "err_block"
    ' 処理をさらに飛ばす
    Resume exit_block

End Sub

無駄が多いサンプルになっていますが、エラー発生時にさらに Resume ステートメントを使って、別の位置の処理を実行させています。

また、Resume ステートメントはエラー発生時にのみ使用することができます。従って、次のような使い方をするとエラーが発生します。

Private Sub CommandButton1_Click()

    GoTo err_block
    
exit_block:
    
    MsgBox "exit_block"

    Exit Sub
    
err_block:

    MsgBox "err_block"
    ' エラーが発生していないため、Resumeは使用できない。
    ' ここでエラーが発生する
    Resume exit_block

End Sub

実行時エラー ’20’: エラーが発生していないときに Resume を実行することはできません。

なお、「そもそも Resume ではなく、Goto 使えよ!」ってのは内緒です。Goto であれば エラーが発生している、いないに関わらず問題なく処理を飛ばすことができます。

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *