MS Access - VBA 中报告的参数

Posted

技术标签:

【中文标题】MS Access - VBA 中报告的参数【英文标题】:MS Access - Parameters from report in VBA 【发布时间】:2017-03-26 16:51:19 【问题描述】:

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

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

这给了我错误:

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

【问题讨论】:

【参考方案1】:

它永远不会找到它。

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

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

或者如果你真的更喜欢动态参数——报表查询参数可以参考表单控件。

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

【讨论】:

非常感谢!但是查询已经这样写了,所以我实际上需要使用动态参数。你知道如何在 Report_Load() 事件中使用这个参数吗?【参考方案2】:

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

【讨论】:

【参考方案3】:

您可以通过使用公共变量并动态更改记录源的sql来做到这一点。

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

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

其次,在运行报表之前将参数值赋给filtDate

然后,在report的report_open事件中修改records source的sql

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

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

【讨论】:

以上是关于MS Access - VBA 中报告的参数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 VBA 动态 SQL SELECT 语句调用 MS Access 参数查询

MS Access:从 VBA 列出宏

kubectl 等待 AWS EKS 上的服务公开 .status.loadBalancer.ingress 字段中报告的 Elastic Load Balancer (ELB) 地址

在 VBA 中为 MS Access 中的用户携带一个变量

MS Access 2013 从 VBA 调用插入查询并出现奇怪的错误

影响 Access 中报告长度的不可见标签和组合框