MS Access - VBA中报告的参数

时间:2017-03-26 16:51:20

标签: sql vba ms-access parameters access-vba

如果您根据带有某些参数的查询(例如StartDate和EndDate)打开报告,我知道我可以在报告中将这些参数用作[Reports]![ReportName]![StartDate]。但是现在我想在VBA函数中使用这些参数,但使用相同的表达式对我不起作用:

MsgBox [Reports]![Test]![StartDate]

这给了我错误:

  

运行时错误“2465”:Microsoft Access找不到该字段   你的表达中提到'StartDate'。

3 个答案:

答案 0 :(得分:1)

它永远不会找到它。

我从不使用动态参数化查询。我使用窗体上的控件来选择过滤条件,并引用OpenReport命令的WHERE参数中的控件(对于OpenForm也是如此)。

DoCmd.OpenReport "Test", , , "[StartDate] = #" & Me.tbxStart & "#"
MsgBox = Me.tbxStart

或者,如果您真的更喜欢动态参数 - 报表查询参数可以引用表单控件。

VBA代码找不到参数,但它可以在报告中找到引用该参数的文本框并以此方式拉取参数值。

答案 1 :(得分:0)

如果您的报表或表单具有查询作为其记录源,则可以将查询的字段(如Observer Flayable in you case)绑定到报表或表单上的控件,并获取值( s)通过引用控件在VBA函数中的该字段。例如,假设您有一个名为StartDate的报告。如果DateReport的记录来源包含DateReport字段,那么您可以在报告上创建一个文本框 - 我们将其称为StartDate - 并设置其控制来源到" StartDate"。然后在VBA中,您可以使用StartDateBox获取当前记录的此字段的值。可能有另一种方法来引用表单或报表的记录源字段值而不将它们绑定到控件,但我现在没有MS Access可用于测试它。

答案 2 :(得分:0)

您可以通过使用公共变量并动态更改记录源的sql来实现。

您可以在调用报告之前将参数值存储在公共变量中。

首先在模块中声明变量 例如,Public filtDate as Date

其次,在运行报告之前将参数值分配给filtDate

然后,在report 中更改记录源的sql

Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = "SELECT * FROM Test WHERE [StartDate] = #" & filtDate & "#"
MsgBox  filtDate
End Sub

这里,记录源的sql是动态设置的,参数值可以直接使用。