• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:BOF と EOF のいずれかが True になっ)

VBAでループ処理中にBOFとEOFエラーが発生する理由

このQ&Aのポイント
  • VBAでループ処理中にBOFとEOFエラーが発生する理由は、最後の値でエラーが発生する原因として、レコードセットの最後まで移動してしまったためです。
  • このエラーが発生するのは、ループの終了条件を確認する前にレコードを移動しようとした場合です。
  • 解決策としては、ループの前に`rs.MoveFirst`を使ってレコードセットの先頭に移動することでエラーを回避できます。

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

  • ベストアンサー
  • drum_KT
  • ベストアンサー率43% (1108/2554)
回答No.1

VBAはだいぶ触っていないので勘ですが。このループ構造だと、 intNo詳細 = rs.RecordCount = 100 の時も rs.MoveNext が呼ばれますよね。ここでエラーになるのでは?

dtwdnaekmesab
質問者

お礼

ありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

http://psp8155.blog13.fc2.com/blog-entry-169.html 同じ現象に出会った人がいて、公表している人がるようだ。 これで疑問解決しませんか。 まずWEB照会をしてから質問するようにしたら。 (特に、ソフト利用で、エラーコメントが出ている場合は、MSなりが出しているので、コメント文章は表現に揺れがなく、それの全体か主要な1部をコピペして、照会するのが有効だという経験をしている。エラー文章が長いほど、どれを言っているのか、特定できる。)

dtwdnaekmesab
質問者

お礼

ありがとうございました。

回答No.3

補足: 私が書く場合には For intNo詳細 = 1 To rs.RecordCount  ↓ N=rs.RecordCount - 1 FOR I =0 TO N   ・・・・・ NEXT I 理由1、ループの上限値を固定するため。 理由2、ループカウンターを他の処理に使うことも考えて。 と、2点だけ補足しておきます。

dtwdnaekmesab
質問者

お礼

ありがとうございました。

回答No.2

For intNo詳細 = 1 To rs.RecordCount  ↓ N=rs.RecordCount FOR I =1 TO N   ・・・・・ NEXT I と書かないのには理由があるのだろうか? >ADOで更新・削除・追加は行っていません。 だとしたら Call 詳細テーブル_rs_1行のレコードを生成する の1行は????? >AbsolutePageとAbsolutePositionは、adPosEOFになっています。 これは、エラーの原因だがループエラーの原因ではないことは明らかです。つまりは、 >要求された操作には、現在のレコードが必要です。 ってこと。それを知るのは冒頭の疑問の答えが必要だと思います。

dtwdnaekmesab
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう