DLookup功能无法在子窗体MS Access VBA中工作

时间:2017-07-11 22:42:53

标签: vba ms-access

我有一个主要形式" fmEmpHWList2"里面有两个子表格。在子表单中" frmSWList2"我有文本字段,我使用Dlookup函数从表中获取值。 当我在子窗体上测试这一切时,一切正常。但是当我把子表单放到主表单中时,我得到了#34; #Name?"错误。

这是我在mainform中的当前代码,它给了我错误,我需要修复:

=DLookUp("Version","EmpSWSum","Software = '7-Zip' AND EmpID=" & [Forms]![fmEmpHWList2]![frmSWList2].[Form]![EmpID])

仅在子表单中,此代码可以正常工作

=DLookUp("Version","EmpSWSum","Software = 'ADG R4i CSDB Client' AND EmpID=" & [Forms]![frmSWList2]![EmpID])

注意事项:EmpID是一个数字

感谢您花时间帮我解决此问题

2 个答案:

答案 0 :(得分:0)

建议命名子窗体容器控件与它所拥有的对象不同,例如ctrSWList。然后在主窗体控件中编码:

=DLookUp("Version","EmpSWSum","Software = '7-Zip' AND EmpID=" & [ctrSWList]![EmpID])

但是,如果此表达式位于子窗体的控件中,并且您希望引用子窗体上的另一个控件,则不需要窗体名称和类前缀。

=DLookUp("Version","EmpSWSum","Software = '7-Zip' AND EmpID=" & [EmpID])

如果子窗体是独立打开的话,这也应该有效。

答案 1 :(得分:0)

我采用了不同的方法并且创建了一个函数而不是执行DLookUp。我认为这是一种更好的方法。我以开放的形式加载函数。

1 Function RunParameterQuery_DAO(Asset As String, Software As String, sTextBox As String) As String
2   ' Comments: Runs a query containing parameters
3   Const cstrQueryName As String = "qrySWVers"
4   Dim dbs As DAO.Database
5   Dim qdf As DAO.QueryDef
6   Dim rst As DAO.Recordset
7   
8   Set dbs = CurrentDb()
9   Set qdf = dbs.QueryDefs(cstrQueryName)
10   qdf.Parameters("asset") = Asset
11   qdf.Parameters("name") = Software
12   ' Open recordset on the query
13   Set rst = qdf.OpenRecordset()
14   Do While Not rst.EOF
15     Me.Controls(sTextBox).Value = rst![SWVer]
16     rst.MoveNext
17   Loop
18    MsgBox (Me.Controls(sTextBox).Value)
19   rst.Close
20   qdf.Close
21   dbs.Close
22 End Function

运行它

Call RunParameterQuery_DAO("L52651", "TortoiseSVN", "TortoiseSVN")