• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:実行時エラー92 forループが初期化されていませ)

実行時エラー92 forループが初期化されていませ

このQ&Aのポイント
  • エクセルVBAでFor Eachを使ってるのですが、Nextの部分で実行時エラー92 forループが初期化されていません。というエラーになります。
  • コードの中で、myObjというオブジェクトをFor Eachで処理していますが、Nextの部分でエラーが発生しています。
  • エラーメッセージから判断すると、初期化されていないForループのためにエラーが発生している可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

まず、On Error GoTo ERR1の飛び先が間違いです。 If文の中に飛び込んでます。 これは、出来ません。独立したルーチンとして書いてください。 通常は Sub MACRO1() On Error Goto ERR1 処理 Exit Sub ERR1: エラー処理 Resume Next End Sub というような書き方になります。 次に myObj.className = "" のIf文内でExit Subで終了してるため、 ▲▲の場合以降の文は無効です。 最後にstrカテゴリ Like "" ですが、なんで演算子がLikeなのですか? Likeはワイルドカードや文字リストを使った比較演算子です。 https://msdn.microsoft.com/ja-jp/library/swf8kaxw.aspx ""との比較なら=でいいのでは? 結果としてmyObj.className = ""の場合は、マクロが終了しています。 そうでない場合は、なにも処理がされていません。 何がしたいのか判らないマクロです。 やりたいことを整理しなおして、新しい質問として投稿したほうがいいのでは?

kgkpwuioekxn
質問者

お礼

ご回答ありがとうございます。

その他の回答 (1)

回答No.1

For Each ループでの処理がExit Subに掛かることなく 最後までループを実行し終えた場合は、 ご提示の記述では、必ず、 On Error GoTo ERR1 が有効な状態のままですから、 ご提示のループを抜けた後、 つまりNext以降の記述でエラーがあれば、 For Each ループを初期化していない(既に解放された)状態で、 ERR1: にジャンプしますから、 '実行時エラー92'になります。 現状を活かすなら、 Next に続けて、 On Error GoTo 0 を追記するような対処になります。 また、 On Error GoTo ERR1 の位置を検討の上、   For Each obl In coll     On Error GoTo line_     ' ' 処理 line_:     On Error GoTo 0   Next などのように書くこともできます。 但し、 On Error GoTo errHandle は、 errHandle: 以下の記述でエラーに対応した処理が済んだ後に Resume や Resume Next のように 本来は、ラインを戻すことで同時にエラーをクリアさせるように扱うものです。 On Error GoTo 0 との組み合わせでは、 正しく、 Err.Clear されないケースもありますので、注意して扱ってください。 以上です。

kgkpwuioekxn
質問者

お礼

ご回答ありがとうございます。

関連するQ&A