Excel VBAのエラー処理(On Error Resume Nextでの処理)について
Excel VBAの勉強をしています。
エラー処理の練習として、次のコードを書いたところ、自分の予想と違う処理となりました。
●自分の予想
e002ラベルの処理の後、exit_handleラベルの処理に飛び、Exit Subによってプロシージャが終わる。
●実際の挙動
e002ラベルの処理の後、exit_handleラベルの処理には飛ばず、End Subによってプロシージャが終わる。
なぜ「実際の挙動」の動きをするのか、理由をご存知の方教えていただけないでしょうか。
ちなみに、On Error Resume Next を On Error GoTo e002 にした場合、なぜか「自分の予想」通りの動きができました。理由は分かりません・・・
また、あくまで On Error Resume Next を使用した上で、自分がやりたいこと(「自分の予想」の動き)をすることは可能でしょうか。
可能であれば、コードをどのように書き換えればよいでしょうか。
VBA
1Sub test() 2 3On Error GoTo e001 4 5Worksheets("存在しないシート").Select 6 7On Error GoTo 0 8 9from_e001: 10 11'★ここを On Error Resume Nextではなく、 On Error GoTo e002 にするとなぜか「自分の予想」どおりの動きができる。 12On Error Resume Next 13 14 Worksheets("存在しないシート").Select 15 16 If Err.Number <> 0 Then 17 18 MsgBox "ここはResume内部でエラーした場合の処理です" 19 MsgBox "ここからエラーe002ラベルに飛びます" 20 GoTo e002 21 22 End If 23 24 MsgBox "エラーなくここまで来たので、最後に終了処理に入ります。" 25 26On Error GoTo 0 27 28GoTo exit_handle 29 30exit_handle: 31 32 On Error Resume Next 33 MsgBox "終了処理をします!" 34 On Error GoTo 0 35 Exit Sub 36 37e001: 38 39 MsgBox "エラー処理(e001ラベル)に飛びました" 40 MsgBox "ここからResumeによって元の処理の続きに行きます" 41 Resume Next 42 43e002: 44 45 MsgBox "エラー処理(e002ラベル)に飛びました" 46 MsgBox "ここから終了処理(exit_handle)に飛びます" 47 Resume exit_handle 48 49End Sub 50 51 52
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/18 10:48