今回はマクロ実行中にエラーが起きても処理を止めずに実行させる方法を備忘録も兼ねて紹介したいと思います。
エラーが起きても処理を止めずに実行させる方法
実行中にエラーが起きても処理を止めなくするには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
![](https://masashi-blog418.com/wp-content/uploads/2024/03/image-2.png)
![](https://masashi-blog418.com/wp-content/uploads/2024/03/image-3-1024x310.png)
そこで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に関する記事を不定期で投稿していますので、是非ご覧ください!
コメント