【Excel VBA】マクロ実行中にエラーが起きても処理を止めずに実行させる方法

Excel
スポンサーリンク

今回はマクロ実行中にエラーが起きても処理を止めずに実行させる方法を備忘録も兼ねて紹介したいと思います。

スポンサーリンク

エラーが起きても処理を止めずに実行させる方法

実行中にエラーが起きても処理を止めなくするにはOn Error Resume Nextを使用します。
これをプロシージャ内に記載すると、実行中にエラーが起きても処理が止まらなくなります。

Sub test_ResumeNext()

...

'エラーが起きても処理が止まらなくなる
On Error Resume Next

...

End Sub

記載する位置ですが、私の場合プロシージャの変数を宣言した後辺りに記載することが多いです

Sub test_ResumeNext()

    Dim mySht    as Worksheet

    On Error Resume Next

...

End Sub
スポンサーリンク

実際どうなるのか

実際に以下のコードを実行してみると分かりますが、取得対象のシートが不明なため実行時エラー’9′:が発生しSet mySht = Sheets("")で処理が止まります。

Sub test_ResumeNext()

    Dim mySht    As Worksheet
    
    Set mySht = Sheets("")

    MsgBox mySht.Name

End Sub

そこでOn Error Resume Nextを記述して実行するとエラーでも処理が止まらなくなります。

Sub test_ResumeNext()

    Dim mySht    As Worksheet
    
    On Error Resume Next
    
    Set mySht = Sheets("")
    
    MsgBox mySht.Name

End Sub

こうすると処理は止まらなくなりますが、Set mySht = Sheets("")がエラーになる(シートを取得できていない)ことに変わりはないため、その後のMsgBox mySht.Nameも実行されなくなります。(myShtには何も入っていない為)

スポンサーリンク

注意点

最後に注意点が2点ほどあるので、軽く触れておきます。

一つは当然ですがエラーが発生しても処理が止まらなくなる為、マクロを開発・デバッグ途中なのであれば記載しない方が無難かと思います(どこでエラーが起きているか判断しづらくなる為)。

もう一つは変数に値を格納する処理でエラーが起きる可能性がある場合、その変数を使用した処理も無視されるかもしれない、という所です。
先ほどの例で言うとSet mySht = Sheets("")→MsgBox mySht.Nameのような感じですね。

まとめ

今回はマクロ実行中にエラーが起きても処理を止めずに実行させる方法を紹介しました。

エラーが起きても処理を止めたくないマクロがあれば是非活用してみてください!

このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!

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