- ベストアンサー
エラーハンドリングに関する質問
- エラーハンドリングについての質問です。マクロ内で「On Error GoTo」を使用してエラーをハンドリングしていますが、エラーがうまく解除されずに発生してしまいます。具体的には、マクロ内で「On Error GoTo 0」を使用してエラーハンドリングを解除しているのに、うまく解除されずにエラーが発生することがあります。また、複数のマクロで「On Error GoTo」を使用することはできるのでしょうか。
- マクロ内でのエラーハンドリングについての質問です。現在、マクロ内で「On Error GoTo」を使用してエラーをハンドリングしていますが、エラーがうまく解除されずに発生してしまいます。具体的には、「On Error GoTo 0」を使用してエラーハンドリングを解除しているのに、うまく解除されずにエラーが発生することがあります。この問題を解決する方法を教えてください。
- エラーハンドリングについての質問です。現在、マクロ内で「On Error GoTo」を使用してエラーをハンドリングしていますが、うまく解除されずにエラーが発生してしまいます。具体的には、「On Error GoTo 0」を使用してエラーハンドリングを解除しているのに、うまく解除されずにエラーが発生することがあります。この問題に対処する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
エラー処理の中でOn Error GoToを記述することはできません。 エラー処理の基本的な構造は、 Sub Macro1() On Error GoTo ErrorTrap1 '-エラーの発生するコード 1 On Error GoTo 0 Exit Sub ErrorTrap1: 'エラー処理 Resume Next End Sub エラー処理が2つある場合は、 Sub Macro1() On Error GoTo ErrorTrap1 '-エラーの発生するコード 1 On Error GoTo 0 Do On Error GoTo ErrorTrap2 '-エラーの発生するコード 2 On Error GoTo 0 Loop Exit Sub ErrorTrap1: 'エラー処理1 Resume Next ErrorTrap2: 'エラー処理2 Resume Next End Sub Resume Next でエラーが発生した行の次の行から再開します。 Resumeには他の構文もありますので、調べてみてください。
その他の回答 (1)
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>「On Error GoTo」は、Subでは、ひとつしか使えないのでしょうか。 違います。 On Error Goto で飛んだあとの、エラー処理ルーチンでは、ResumeするかExit Subするまでの間、On Error文は一切無視されます。 そして、エラー処理中は、すべてのエラーがシステムによりトラップされ、On Error Goto 0を行ったのと同様に、システムによるエラー表示が行われます。 なお、エラートラップは「関数ごと」に処理される為、エラートラップ中に関数を呼ぶと、呼ばれた関数の中にあるOn Error文は正常に機能します。 従って、質問者さんが書いたプログラムは、 Sub Macro1() On Error GoTo ErrorTrap1 '-エラーの発生するコード 1 ErrorTrap1: Do '-エラーの発生するコード 2 ←ここのエラーはシステムが通常のエラー表示を行う。 Loop ErrorTrap2: End Sub と同等です。2つに分けた場合も Sub Macro1() On Error GoTo ErrorTrap1 '-エラーの発生するコード 1 ErrorTrap1: Call Macro2 End Sub Sub Macro2() Do On Error GoTo ErrorTrap2 ←このOn Error Gotoは、Macro1とは無関係なので、正常に機能する '-エラーの発生するコード 2 On Error GoTo 0 Loop ErrorTrap2: End Sub と同等です。
お礼
勉強になりました。 ありがとうございます。
お礼
Resumeの説明までいただき、ありがとうございました。