2013-04-04 32 views
-1

我最近被赋予创建一个表格的任务,该表格将自动填充表格中的信息。使用称为ModID的主键选择表单自动填充信息。我有一个组合框,其中列出了被列为“活动”的ModID。通过设置变量使用简单的VBA代码自动填充访问表格

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,其中ModID在P_Review等于localModID在VBA代码中设置。但是当我去窗体视图并选择一个ModID时,我得到错误3070:Microsoft Access数据库引擎不识别为有效的字段名称或表达式。我从我们已经使用的另一个数据库中复制了这段代码,但在这个新实例中失败了。

回答

0
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 

这是回答问题。我用这个代码来自动更新。

0

尝试

Forms!<whatever_this_form_name_is>![localModID] 

在使用DLookup

+0

对不起。我忘了在我的问题中提到它,但我尝试了这一点,它会返回相同的错误消息。 – RBSt 2013-04-04 15:08:25