あぁ、コードがめちゃくちゃでしたね。ごめんなさい
hatenaさんが正しいコード例を提示してくださっているのでそちらを参考にしてください
クエリを使うか、レコードセットを操作するかについては、フォームに読み込んだレコードを操作するのであれば、圧倒的にDAOによるレコードセットの操作のほうが楽だと思います
開いたフォームがすでにレコードセットを開いているので、よくあるレコードセットを扱うための魔法の言葉が不要で、With
ステートメントの活用により余計な変数も不要になるので
フォームのレコードセットを操作する方法はいくつかあります。(hirotonの回答がめちゃくちゃなのも、これらを適当に組み合わせてしまっているからです)
DoCmd
によるフォームの操作
If Me.CurrentRecord < 1 Then Exit Sub
DoCmd.GoToRecord , , acLast
Do Until Me.CurrentRecord = 1
Me!suitei_tenko = Me!コンボ351
DoCmd.GoToRecord , , acPrevious
Loop
Me!suitei_tenko = Me!コンボ351
ACCESSの機能を使ってフォームを見たまま操作する例です。見たまま、レコードを移動させながら操作するので、suitei_tenko
もMeからの参照で現在のカレントレコードのフィールドの値を修正します
レコードセットの操作と異なり、レコードが無い場合の操作を行うとエラーが発生するので、それようの対策が必要です
「マクロ」で作る場合の理論をそのままVBAでコードにするとこんな感じでしょう
Me.Recordset
を操作
With Me.Recordset
.MoveFirst
Do Until .EOF
.Edit
!suitei_tenko = Me!コンボ351
.Update
.MoveNext
Loop
End With
With Me.Recordset
.MoveFirst
Do Until .EOF
Me!suitei_tenko = Me!コンボ351
.MoveNext
Loop
End With
表示しているフォームそのもののレコードを扱います。レコードセットのレコードを移動させると、フォーム上のレコードも移動するので、レコードの移動だけレコードセットを操作して、レコードの編集はフォーム上のコントロールを操作するとかいう訳の分からないコードを組むこともできます。(コードが短くなるだけで大したメリットはない)
Me.RecordsetClone
を操作
With Me.RecordsetClone
.MoveFirst
Do Until .EOF
.Edit
!suitei_tenko = Me!コンボ351
.Update
.MoveNext
Loop
End With
フォームに読み込まれているレコードセットを直接操作します。ただし、表示中のレコードは移動しません。Meによる参照と、レコードセットからの参照で、参照しているレコードを別々に持つことになります
Me.Recordset.Clone
を操作
(コードは省略)
全く同じレコードセットを新しく生成します
新規でレコードセットが生成されるので、常にレコードセットの先頭にカーソルがある状態のレコードセットになります。(DoCmd.GoToRecord
やMoveFirst
のような、全件を操作するための準備がいらない)
新規でレコードセットを生成しているので、閉じる処理(Close
)が必要
フォームとは関係ないレコードセットを操作するので、フォームに反映させる処理(recalc
/refresh
/requery
)が必要