手前味噌ですが…。
まず
ON Error Go To とは…
- エラー処理ルーチンの開始を示すもの
- これを記載された処理はエラーが起こると定義したところまでGOTOしますって感じだと思っています。
記載例>
Sub Main OyaHoge()
On Error GoTo OyaHoge_Eroor
Call KoHoge1()
Call KoHoge2()
Debug.Print("処理完了したヨ")
Exit Sub
OyaHoge_Eroor:
Debug.Print("エラーダヨ")
End Sub
上記のように書けば良いと思っているがどうでしょうか?
このままではOyaHoge()
とKoHoge1()
、KoHoge2()
の処理の中でエラーが起きるとDebug.Print
で("エラーダヨ")
と記載してMainの処理を完了する。
このままでは、正常処理に記載されている、("処理完了したヨ")
が表示しない(処理完了のフラグとかを立てなければいけないときとかも該当する)
エラーのときエラー処理と完了処理を行いたいとき
はどうすれば良いか。
・・・単純にエラー処理の後に完了処理を呼んでしまえば良い!!
つまり以下のようになると思う。
記載例>
Sub Main OyaHoge()
Dim ErrorFlg As Boolean
'ErrorFlag初期化
ErrorFlg = False
On Error GoTo OyaHoge_Eroor
Call KoHoge1()
Call KoHoge2()
Hoge_End:
If ErrorFlg = True Then
Debug.Print("エラーあり")
End If
Debug.Print("処理完了したヨ")
Exit Sub
Hoge_Eroor:
Debug.Print("エラーダヨ")
ErrorFlg = True
GoTo Hoge_End
End Sub
上記のように再度呼びたい処理をエラー処理の後に呼んでやれば良いと思っている。
正常のときはそのまま完了処理を通して、エラーのときはエラー処理を解してから完了処理(ErrorFlagがTrueなので("エラーあり")のコメント出す)を通す感じです。
なんかエラーのお知らせ重なって気持ち悪い…
動き例>
正常のとき
→OyaHoge()→KoHoge1()→KoHoge2()→"処理完了したヨ"
KoHoge2()でエラーが出たとき
→OyaHoge()→KoHoge1()→KoHoge2()→Hoge_Eroor:→"エラーダヨ"→エラーあり→"処理完了したヨ"
最後に
以下の文言でググッた方が有意義と思います。
- On Error Go To
- エラー処理
以上。