- ベストアンサー
VBAでループ処理中にBOFとEOFエラーが発生する理由
- VBAでループ処理中にBOFとEOFエラーが発生する理由は、最後の値でエラーが発生する原因として、レコードセットの最後まで移動してしまったためです。
- このエラーが発生するのは、ループの終了条件を確認する前にレコードを移動しようとした場合です。
- 解決策としては、ループの前に`rs.MoveFirst`を使ってレコードセットの先頭に移動することでエラーを回避できます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBAはだいぶ触っていないので勘ですが。このループ構造だと、 intNo詳細 = rs.RecordCount = 100 の時も rs.MoveNext が呼ばれますよね。ここでエラーになるのでは?
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
http://psp8155.blog13.fc2.com/blog-entry-169.html 同じ現象に出会った人がいて、公表している人がるようだ。 これで疑問解決しませんか。 まずWEB照会をしてから質問するようにしたら。 (特に、ソフト利用で、エラーコメントが出ている場合は、MSなりが出しているので、コメント文章は表現に揺れがなく、それの全体か主要な1部をコピペして、照会するのが有効だという経験をしている。エラー文章が長いほど、どれを言っているのか、特定できる。)
お礼
ありがとうございました。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
補足: 私が書く場合には For intNo詳細 = 1 To rs.RecordCount ↓ N=rs.RecordCount - 1 FOR I =0 TO N ・・・・・ NEXT I 理由1、ループの上限値を固定するため。 理由2、ループカウンターを他の処理に使うことも考えて。 と、2点だけ補足しておきます。
お礼
ありがとうございました。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
For intNo詳細 = 1 To rs.RecordCount ↓ N=rs.RecordCount FOR I =1 TO N ・・・・・ NEXT I と書かないのには理由があるのだろうか? >ADOで更新・削除・追加は行っていません。 だとしたら Call 詳細テーブル_rs_1行のレコードを生成する の1行は????? >AbsolutePageとAbsolutePositionは、adPosEOFになっています。 これは、エラーの原因だがループエラーの原因ではないことは明らかです。つまりは、 >要求された操作には、現在のレコードが必要です。 ってこと。それを知るのは冒頭の疑問の答えが必要だと思います。
お礼
ありがとうございました。
お礼
ありがとうございました。