0

我最近被赋予了创建一个表单的任务,该表单将自动填充表格中的信息。使用称为 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 填充某些字段。我在一个文本框中有一个 dlookup 来查找表 P_Review 中的信息。

=DLookUp("Threshold","P_Review","ModID =" & [localModID])

因此 DlookUp 应该在 P_Review 表中找到列阈值的值,其中 P_Review 中的 ModID 等于 VBA 代码中设置的 localModID。但是,当我转到表单视图并选择 ModID 时,我收到错误 3070:Microsoft Access 数据库引擎无法识别为有效的字段名称或表达式。我确实从另一个我们已经在使用的数据库中复制了这段代码,但在这个新实例中它失败了。

4

2 回答 2

1
Private Sub ModID_AfterUpdate()
    Dim rs As Object

   Set rs = Me.RecordsetClone
   With rs
      .FindFirst "ModID='" & Me.ModID & "'"
   If Not .NoMatch Then
      Me.Bookmark = .Bookmark

   Else
      DoCmd.GoToRecord , , acNewRec
      Me!ModID = Me.ModID
   End If
   End With

End Sub

这是问题的答案。我使用此代码自动更新。

于 2013-04-10T14:12:40.620 回答
0

尝试

Forms!<whatever_this_form_name_is>![localModID]

在您的 DLOOKUP 中

于 2013-04-04T14:50:54.703 回答