私は最近、テーブルからの情報を自動入力するフォームを作成するタスクを与えられました。フォームが自動入力する情報は、ModID と呼ばれる主キーを使用して選択されます。アクティブとしてリストされている ModID のリストを含むコンボ ボックスがあります。
SELECT ModID
FROM P_Review
WHERE Status = "Active"
十分に単純です。次に、更新後のイベントで VBA コードを実行します。したがって、コンボ ボックスの値を選択または変更すると、この VBA コードが実行されます。
Option Compare Database
Option Explicit
Private Sub selectModID_AfterUpdate()
'Find the record that matches the control.
On Error GoTo ProcError
Dim rs As Object
Set rs = Me.RecordsetClone
With rs
.FindFirst "ModID=" & Me.selectModID
If Not .NoMatch Then
Me.Bookmark = .Bookmark
Else
DoCmd.RunCommand acCmdRecordsGoToNew
Me!localModID = Me.selectModID.Column(0)
End If
End With
ExitProc:
Exit Sub
ProcError:
MsgBox "Error: " & Err.Number & ". " & Err.Description
Resume ExitProc
End Sub
コードは正常に実行されます (デバッグまたは実行時にエラーは発生しません)。
次に、アクセス テキスト ボックスについて説明します。変数 localModID に基づいて特定のフィールドに入力したいと思います。テーブル P_Review 内の情報を見つけるために、テキスト ボックスに dlookup があります。
=DLookUp("Threshold","P_Review","ModID =" & [localModID])
したがって、DlookUp はテーブル P_Review で列のしきい値の値を見つける必要があります。ここで、P_Review の ModID は VBA コードで設定された localModID と等しくなります。しかし、フォーム ビューに移動して ModID を選択すると、エラー 3070 が表示されます。Microsoft Access データベース エンジンは、有効なフィールド名または式として認識しません。既に使用している別のデータベースからこのコードをコピーしましたが、この新しいインスタンスでは失敗します。