1

年間目​​標を設定するために、すべての従業員の ID と名前を入力する必要がある継続的なフォームがあります。1 人の従業員に対して重複したレコードが作成される可能性があるため、コンボ ボックスを使用して手動で追加したくありません。フォームには、EMPID (従業員 ID) と EmpName (従業員の名前) という名前の 2 つのフィールドが含まれています。「InsertNameTarget」という名前のクエリから、すべての EMPID と EmpName が連続フォームに自動入力されるようにします。いくつかの YouTube ビデオを見た後、次のようなものを思いつきました。

Dim i As Integer

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("InsertNameTarget")

For i = 0 To rs.RecordCount - 1
    DoCmd.GoToControl "EMPID"
    DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
    EMPID = rs.Fields("EMPID")
    EmpName = rs.Fields("EmpName")
    rs.MoveNext
Next i

rs.Close
Set rs = Nothing
db.Close

意図したとおりに機能しません。次の結果が得られます。 ここに画像の説明を入力

10 件のレコードのうち最初のレコードを提供しており、すべてのレコードに EMPID が適切に挿入されていません。ここで何が間違っているのかわかりません。正しい方向に私を向けることができますか?

4

1 に答える 1

1

連続フォームは扱いにくいです。各コントロールは 1 回しか表示されないため、確実に値を割り当てることはできません。

代わりに、フォーム レコードセットを操作します。

Dim i As Integer

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim frs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("InsertNameTarget")
Set frs = Me.Recordset

Do While Not rs.EOF
    frs.AddNew
    frs!EMPID = rs.Fields("EMPID")
    frs!EmpName = rs.Fields("EmpName")
    frs.Update
    rs.MoveNext
Loop

rs.Close
Set rs = Nothing
db.Close
于 2021-12-16T12:41:45.307 に答える