- ベストアンサー
実行時エラー92 forループが初期化されていませ
- エクセルVBAでFor Eachを使ってるのですが、Nextの部分で実行時エラー92 forループが初期化されていません。というエラーになります。
- コードの中で、myObjというオブジェクトをFor Eachで処理していますが、Nextの部分でエラーが発生しています。
- エラーメッセージから判断すると、初期化されていないForループのためにエラーが発生している可能性があります。
- みんなの回答 (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 = ""の場合は、マクロが終了しています。 そうでない場合は、なにも処理がされていません。 何がしたいのか判らないマクロです。 やりたいことを整理しなおして、新しい質問として投稿したほうがいいのでは?
その他の回答 (1)
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
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 されないケースもありますので、注意して扱ってください。 以上です。
お礼
ご回答ありがとうございます。
お礼
ご回答ありがとうございます。