今回はエラーが起きたら指定したラベルにジャンプさせる方法を備忘録も兼ねて紹介したいと思います。
エラーが起きたら指定したラベルにジャンプさせる方法
エラーが起きたら指定したラベルにジャンプさせるにはOn Error Goto 【ラベル名】
を使用します。
'エラーが発生したらmyErrorというラベルまでジャンプする
On Error GoTo myError
例として以下のコードを使用して説明します。
指定したシートを格納し、そのシート名を出力させるマクロですが、シートが取得できなかった場合「シートが取得できませんでした。」というメッセージが表示されるようになっています。
Sub test_GotoError()
Dim mySht As Worksheet
On Error GoTo myError
Set mySht = Sheets("")
MsgBox mySht.Name
Exit Sub
myError:
MsgBox "シートが取得できませんでした。"
End Sub
上記コードをこのまま実行すると以下のメッセージボックスが表示されます。
(mySht
には何も格納されていない為)
![](https://masashi-blog418.com/wp-content/uploads/2024/03/image-4.png)
![](https://masashi-blog418.com/wp-content/uploads/2024/03/image-5.png)
逆にシート名が指定されていれば、指定したシート名が出力されます。
Set mySht = Sheets("Sheet1")
![](https://masashi-blog418.com/wp-content/uploads/2024/03/image-6.png)
注意点
注意点としてラベルの手前にExit Sub
を記述するのを忘れないようにしましょう。
というのも、Exit Sub
は処理を終了させることが出来るのですが、これを記述しないとラベル以下の処理もそのまま実行されてしまうからです。
今回の例で言うとMsgBox mySht.Name
を実行した後にMsgBox "シートが取得できませんでした。"
も実行されてしまう、といった感じですね。
![](https://masashi-blog418.com/wp-content/uploads/2024/03/image-6.png)
![](https://masashi-blog418.com/wp-content/uploads/2024/03/image-7.png)
こうなると
![](https://masashi-blog418.com/wp-content/uploads/2022/09/b0261.png)
シート名が出力されてるのに「シートが取得できませんでした」ってどういうことだ??
ということになりかねないので、ラベルの上にExit Sub
を記述するのを忘れないようにしましょう!
まとめ
今回はエラーが起きたら指定したラベルにジャンプさせる方法を紹介しました。
On Error Goto 【ラベル名】
を使うことで例外処理が簡単に再現できるので、是非参考にしていただければと思います。
このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!
コメント