在DoCmd.OpenReport Wherecondition参数

时间:2018-10-09 20:21:24

标签: vba ms-access access-vba ms-access-2016

我有一个命令按钮,可使用查询所应用的过滤器打开报告。这样一来,我就可以通过父报表的子报表中的字段值来过滤报表,否则过滤条件将更加简单。 我将Wherecondition设置如下:

Private Sub CmdOpenReport_Click()
    DoCmd.OpenReport "rptName", , , CategoryID = [Queries].[qryFltrRptByCat]!CategoryID
End Sub

单击按钮时,出现以下错误消息:

  

运行时错误“ 2465”

     

Microsoft Access找不到表达式中引用的字段。

引用查询中的字段的正确语法是什么?

查询在子表单中查找值,并找到与子表单值匹配的CategoryID。这是因为子表单中的数据与父表单中的CategoryID具有多对一的关系。

2 个答案:

答案 0 :(得分:0)

不能像这样直接引用表或查询。使用DLookup()。或参考表格上的控件。必须将变量连接到文字字符串,不要忘记引号:

DoCmd.OpenReport "rptName", , , "CategoryID = " & Me.CategoryID

答案 1 :(得分:0)

如果CategoryID处于有效形式并且是字符串,则可以使用:

Docmd.OpenReport "rptName", , , "CategoryID = '" & Me.CategoryID & "'"

如果CategoryID处于有效形式且为整数/双精度,则可以使用:

Docmd.OpenReport "rptName", , , "CategoryID = " & Me.CategoryID

如果CategoryID在主窗体中,但子窗体处于活动状态,则可以使用:

Docmd.OpenReport "rptName", , , "CategoryID = " & Me.Parent.CategoryID

您总是可以使用总参考:

Docmd.OpenReport "rptName", , , "CategoryID = " & Forms!YourForm!CategoryID

您可以在here中查找更多信息: