on error 参考

エクセル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」の基本的な使い方を知りたい方はこちらをご覧ください。

balance macro ocean pebbles

◆対策

マクロ「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はできないようになっています。

なぜかは、わかりませんが、エラー処理中に、またエラー処理、またまた、エラー処理・・・のような状態を発生させないようにしている様な感じですかね

※個人的な適当な推測です

close up shot of keyboard buttons

◆「On Error GoTo」の使い方

エクセル VBAの「On Error GoTo」の使い方はこちらで紹介しています。

「On Error GoTo」についてしっかり記載してあるので
をしっかりマスターして、エラー処理を完璧にしましょう。

◆まとめ

記事の途中にも記載しましたが
「On Error GoTo ラベル1」のコードを書いた時は、「ラベル1」の後に「Resume ラベル2」も記述した方がいいでしょう。

むしろ、「On Error GoTo」を使う時は、「Resume」のコードまで書くのが、正しい使い方なのかもしれません。

これを読んでも解決できない方、なにか不明点がある場合は
コメントして頂くか、こちらからお問い合わせしてください。

◆「あなたへ」のおすすめリンク

マクロを高速化したいあなたへ~VBA高速化の常識~

マクロでできることをおさらい

最新 文房具・オフィス用品 の 売れ筋ランキングはこちら

“エクセルVBA【On Error GoTo】 2回目以上使いたい【複数回のエラー処理】” への5件の返信

  1. この件で”何十年”も苦しんでいましたが、ようやく解決しました。
    どうもありがとうございました。

    1. ”何十年”も苦しまれていた件の解決する手助けができて
      私も嬉しいです。
      記事を書く励みになります。

      1. おっしゃる通り、「Resume ラベル」ではなく、「Resume」のみでも
        「On Error GoTo」を 2回目以降も使用できるようになります。
        ですが、その場合は、動作が異なりますのでご注意ください。

        「Resume」のみ使用する場合は、エラーが発生した行にジャンプしますので
        エラーになる要因が取り除かれていない場合は、再度エラーになります。
        そして、無限ループになってしまいます。。。
        なので、私は、「Resume」のみを使用するのはオススメしていません。

        1. 再度のご説明どうもありがとうございました。
          今回はWeb読み込み速度によるエラーで、時間が経てば解消するものでしたので、何となくResumeのみでも動いていたようです。
          他のシーンでは「Resume ラベル」の必要性を心して使いたいと思います。
          またよろしくお願いします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です