お世話になります。
For文のループ内にDoCmd.GoToRecord , , acNextを入れています。
ループの回数はForms("フォーム1").RecordsetClone.RecordCountで最大値を設定しています。
この最大値が多いとき、DoCmd.GoToRecord , , acNextがエラーとなってしまいます。
ループ回数を少なくすると、エラーが出ないのですが、なぜこのようなことがおこるのかさっぱりわかりません。
ループ回数が20回だとエラーにならず、59回だとエラーになります。
メモリ不足等の問題でしょうか?
どなたかご教授いただければ幸いです。
For文のループ内にDoCmd.GoToRecord , , acNextをいれるというようなことはしたことがないので原因は分かりませんが、
たぶん、もっと効率的かつ高速かつ安全な方法があると思います。
具体的にどのようなことをしたいのか説明されたら、具体的なアドバイスでつきそうです。
表示されている全レコードを更新したいとかなら、更新クエリで更新するとか、フォームのRecordsetプロパティを使って更新するとか、いろいろな方法があります。
Docmdは非同期処理なので、前のレコード移動が終わる前に次のレコード移動でエラーになっている可能性があるのでは?
回答頂いていながら返信が遅くなり申し訳ありません。長期入院していたため回答できませんでした。
深くお詫びいたします。
帳票フォームのフィルターで表示されたレコードだけに対して、フィールド1の値を変更したいです。
フィールド2、3、4の値を連続した文字列としてフィールド1に入れたいのですが、
これをFor分の中にDoCmd.GoToRecord , , acNextを入れると、エラーになって次のレコードに行けません
このような場合はどう記述するべきなのか、ご教授いただければ幸いです。
よろしくお願いいたします。
2つの案が考えられます。
第一案
フォームのレコードセットを操作して更新する。
フィールド名は F1, F2, F3, F4 と仮定してます。
フォーのレコードセットの扱いについては下記をご参考に。
フォームの Recordset, RecorsetClone, RecordSet.Clone の違いとは? - hatena chips
第2案
フォームのFilterプロパティで抽出条件を取得して、それを利用して更新クエリを実行する。
フォームのレコードソースのテーブル名はTbl1と仮定
早々のご回答ありがとうございます。
第一案でできそうです。
もう少し勉強します!