Microsoft Access 掲示板

1つのコンボボックスから、複数のテキストボックスに同時入力したい / 8

9 コメント
views
4 フォロー
8
hiroton 2024/04/04 (木) 18:49:44 c3230@f966d

あぁ、コードがめちゃくちゃでしたね。ごめんなさい
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.GoToRecordMoveFirstのような、全件を操作するための準備がいらない)
新規でレコードセットを生成しているので、閉じる処理(Close)が必要
フォームとは関係ないレコードセットを操作するので、フォームに反映させる処理(recalc/refresh/requery)が必要

通報 ...