エクセルVBA【On Error GoTo】 2回目以上使いたい【複数回のエラー処理】
VBAの「On Error GoTo」は1回しか処理されず、複数回、使うと、指定したラベルにジャンプせずに、そのままエラーが発生し、「On Error GoTo」が効かない状態が発生します。
なんでやねんって感じで、困りますよね。
VBAの「On Error GoTo」が効かない2回目以降も使う解決策を記載したので、下記をご覧ください。
マクロで「On Error GoTo」を使った、エラー処理を複数使いこなせるようにしましょう。
VBAの「On Error GoTo」の基本的な使い方を知りたい方はこちらをご覧ください。
< ---目次--- >
◆対策
マクロ「On Error GoTo」の2回目以降が効かない状態が発生している方は下記コードのようにしましょう。
On Error GoTo ErrLabel1
ErrLabel1:
Resume ErrGoToRecovery1 'ResumeでOn Error GoToがまた使える
ErrGoToRecovery1:
「Resume」の後に「ラベル」を指定すれば、OKです。
2回目からはこれを繰り返し続ければ、無限にエラートラップ(On Error GoTo)を使えます。
「On Error GoTo ラベル1」を使う時は「Resume ラベル2」もセットで使うと覚えてもいいかもしれません。
◆理由
「Resume」を使わないと「On Error GoTo」が2回目から普通にエラーが表示されてしまうのは、理由があります。
エラー処理中(1回目)のエラー(2回目)はGoToはできないようになっています。
なぜかは、わかりませんが、エラー処理中に、またエラー処理、またまた、エラー処理・・・のような状態を発生させないようにしている様な感じですかね
※個人的な適当な推測です
◆「On Error GoTo」の使い方
エクセル VBAの「On Error GoTo」の使い方はこちらで紹介しています。
「On Error GoTo」についてしっかり記載してあるので
をしっかりマスターして、エラー処理を完璧にしましょう。
◆まとめ
記事の途中にも記載しましたが
「On Error GoTo ラベル1」のコードを書いた時は、「ラベル1」の後に「Resume ラベル2」も記述した方がいいでしょう。
むしろ、「On Error GoTo」を使う時は、「Resume」のコードまで書くのが、正しい使い方なのかもしれません。
これを読んでも解決できない方、なにか不明点がある場合は
コメントして頂くか、こちらからお問い合わせしてください。
◆「あなたへ」のおすすめリンク
マクロを高速化したいあなたへ~VBA高速化の常識~
マクロでできることをおさらい
最新 文房具・オフィス用品 の 売れ筋ランキングはこちら
この件で”何十年”も苦しんでいましたが、ようやく解決しました。
どうもありがとうございました。
”何十年”も苦しまれていた件の解決する手助けができて
私も嬉しいです。
記事を書く励みになります。
Resumeのみでも動くようでした。
おっしゃる通り、「Resume ラベル」ではなく、「Resume」のみでも
「On Error GoTo」を 2回目以降も使用できるようになります。
ですが、その場合は、動作が異なりますのでご注意ください。
「Resume」のみ使用する場合は、エラーが発生した行にジャンプしますので
エラーになる要因が取り除かれていない場合は、再度エラーになります。
そして、無限ループになってしまいます。。。
なので、私は、「Resume」のみを使用するのはオススメしていません。
再度のご説明どうもありがとうございました。
今回はWeb読み込み速度によるエラーで、時間が経てば解消するものでしたので、何となくResumeのみでも動いていたようです。
他のシーンでは「Resume ラベル」の必要性を心して使いたいと思います。
またよろしくお願いします。