[ VBA ] エラーを無視して処理を継続する ( On Error Resume Next )

Pocket

ここでは、VBA でエラー(例外)が発生した場合に、それを無視するサンプルを掲載しています。通常 VBA でエラーが発生すると以下のようなダイアログが出力され処理が停止します。

スポンサーリンク

エラーが発生するサンプル

Private Sub CommandButton1_Click()

    ' 0で除算する
    Dim div As Double
    div = 10 / 0
    
    ' 何かの後続処理
    ・・・
    ・・・

End Sub

エラーを無視して処理を継続させる On Error Resume Next

エラーが発生しても後続処理に影響を与えず、エラーを無視して処理を継続させたいような場合には、以下のように [ On Error Resume Next ] を記述します。まるで、キャプテン翼に出てくる日向小次郎のドリブルのようです。

Private Sub CommandButton1_Click()

    ' エラーが発生しても無視して処理を継続させる
    On Error Resume Next
    
    Dim div As Double
    div = 10 / 0
    
    ' エラーを無視しているため、この位置の処理は実行される

    ・・・・
    (何らかの処理)
    ・・・・

End Sub

エラーの発生を検出する ( On Error GoTo )

VBA でエラーが発生したことを検出するには、On Error GoTo でエラー発生に処理をジャンプさせます。

Private Sub CommandButton1_Click()

    ' エラー発生時には、特定のラベルまで処理をジャンプさせる
    On Error GoTo MyError
    
    Dim div As Double
    div = 10 / 0
    
    ' エラーが発生しない場合は、プロシージャを終了する
    Exit Sub
    
MyError:

    ' エラー時のみエラー情報を出力する
    Call outputErrInfo

    ' 出力結果
    '--------------------------------------------------------
    ' Source       = VBAProject
    ' Number       = 11
    ' Description  = 0 で除算しました。
    ' HelpContext  = 1000011
    ' HelpFile     = C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA7D1\VbLR6.chm
    ' LastDllError = 0
    
End Sub

Private Sub outputErrInfo()
    '
    ' デバッグ用にエラー情報を出力する
    '
    Debug.Print "Source       = " & Err.Source
    Debug.Print "Number       = " & Err.Number
    Debug.Print "Description  = " & Err.Description
    Debug.Print "HelpContext  = " & Err.HelpContext
    Debug.Print "HelpFile     = " & Err.HelpFile
    Debug.Print "LastDllError = " & Err.LastDllError
    
    ' エラー情報をクリアする
    Err.Clear

End Sub

できる限りエラーとならないよう、コントロールしたほうがいいですYO

スポンサーリンク


Pocket

Leave a Comment

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