Access 2013 打开表单过滤器问题

Access 2013 Open Form Filter issue

我在 Access 2013 中使用 VBA 打开应用了筛选器的表单时遇到问题。我正在尝试过滤打开记录和当前用户所属部门的数据。

对于我正在测试的用户,他们的部门是 6,数据 table 有 3 条记录,其部门是 6 并且 IsOpen = Yes。

我正在使用的命令如下 - 表单打开,但是当包含 Dlookup 时不显示任何数据(如果我只是 运行 它与 IsOpen 查询,它 return 全部打开记录)。

如果我将 Dlookup 放入表单的字段中,它 return 是当前用户的部门编号(在本例中为 6)。

如果我对 return 数据创建一个简单查询,其中 IsOpen = Yes,部门 = 6,我将得到预期的 3 条记录 returned。

我的代码有问题吗?或者更好的方法来实现我的需要?

DoCmd.OpenForm "frm_ServiceRequestRegister", acNormal, "", IsOpen = True And Department = DLookup("[lkp_Department]", "tbl_Users", "[id] =" & [TempVars]![CurrentUser]), , acNormal

如有任何帮助,我们将不胜感激。

此致, 加里

关键是Where参数需要加引号。它是一个传递给 OpenForm 函数的字符串。如果排除引号,则 "where clause" 会在任何内容传递给 OpenForm 之前进行评估,并且传递 truefalse 而不是您想要的内容。

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

这没有产生错误这一事实说明了一些事情中的一个或多个。

  1. 您没有在模块顶部显式设置选项(始终选中此选项 Tools > Options > Editor > Require Variable Declaration
  2. 您的数据源中有一些 controls/fields 巧合地允许 IsOpen = True And Department = DLookup("[lkp_Department]", "tbl_Users", "[id] =" & [TempVars]![CurrentUser]) 按原样计算。

无论哪种方式,将来调试此方法都是单步执行代码并在直接窗格中执行参数。如果它们不是您所期望的,那么就出问题了。

你应该在where语句中将可变部分的固定部分用引号括起来并用'&'连接起来,就像这样:"IsOpen = True And Department =" & DLookup ("[lkp_Department ]", "tbl_Users" [id] = "& [TempVars]![CurrentUser]),acNormal