我在Access 2013中使用VBA打开一个已应用过滤器的表单时遇到问题。我试图过滤打开记录的数据和当前用户所属的部门。
对于我正在测试的用户,他们的部门是6,数据表有3个记录,其部门是6,IsOpen =是。
我正在使用的命令在下面 - 表单打开,但是当包含Dlookup时没有显示数据(如果我只是使用IsOpen查询运行它,它将返回所有打开的记录)。
如果我将Dlookup放入表单上的字段,则返回当前用户的部门编号(在本例中为6)。
如果我创建一个简单的查询来返回IsOpen = Yes和Department = 6的数据,我会得到预期的3条记录。
我的代码中有什么问题吗?或者更好的方式来实现我的需求?
DoCmd.OpenForm "frm_ServiceRequestRegister", acNormal, "", IsOpen = True And Department = DLookup("[lkp_Department]", "tbl_Users", "[id] =" & [TempVars]![CurrentUser]), , acNormal
任何帮助都将不胜感激。
此致 加里。
答案 0 :(得分:0)
关键是Where
参数需要在引号中。它是一个传递给OpenForm
函数的字符串。如果你在引号中排除" where子句"在将任何内容传递给OpenForm
之前进行评估,并且传递true
或false
而不是您想要的内容。
Dim userDept as long 'Maybe this is a string? I don't know your table
userDept = DLookup("[lkp_Department]", "tbl_Users", "[id] =" & [TempVars]![CurrentUser])
DoCmd.OpenForm "frm_ServiceRequestRegister", acNormal, "", "IsOpen = True And Department = " & userDept, , acNormal
这没有产生错误的事实说明了一件事或多件事。
Tools > Options > Editor > Require Variable Declaration
)IsOpen = True And Department = DLookup("[lkp_Department]", "tbl_Users", "[id] =" & [TempVars]![CurrentUser])
按原样进行评估。无论如何,将来调试此方法的方法是单步执行代码并在即时窗格中执行参数。如果它们不是你所期望的,那就是问题。
答案 1 :(得分:0)
你应该在where语句中将变量部分的固定部分分开,用引号括起来并加上'&',如下所示:“IsOpen = True And Department =”& DLookup(“[lkp_Department]”,“tbl_Users”[id] =“& [TempVars]![CurrentUser]),, acNormal