VBA基于查询运行Access Report with Parameter

时间:2016-07-08 13:24:10

标签: vba ms-access parameters access-vba

我想用VBA脚本自动化一些Access报告。但是当我想用DoCmd.OpenReport运行它们时,我遇到的问题是每个Report都有一个来自底层Query的参数的Popup。

这是参数在查询中的样子:

PARAMETERS [Time] Text ( 255 );

我搜索了很多并尝试了:

 DoCmd.OpenReport "B_My_Report", acViewPreview, , "[Time]= 423"

但这并没有奏效;弹出窗口仍然出现,当我什么都不输入时,查询将失败,因为 Time 参数为空。

有没有办法可以使用参数值调用Report。我阅读了很多建议以完全删除参数并使用where中的OpenReport条件。但是我无法更改这些查询,因为它们不是由我制作和维护的。我有时只需要运行它们。所以我希望在不触及报告或查询的情况下找到解决方案。

3 个答案:

答案 0 :(得分:3)

如果您的Access版本为> = 2010,请考虑DoCmd.SetParameter Method

此查询是我的报告的记录来源

PARAMETERS which_id Long;
SELECT rmy.id, rmy.reportDate, rmy.gainOrLoss
FROM record_matYields AS rmy
WHERE rmy.id=[which_id] OR [which_id] Is Null;

那么我可以为参数分配一个值并打开仅显示匹配记录的报告(id是主键):

DoCmd.SetParameter "which_id", 4
DoCmd.OpenReport "rptFoo",acViewReport

或者,由于查询OR [which_id] Is Null子句中的WHERE条件,如果我想要包含所有记录而不管其id值是什么,我可以在打开报告之前为参数指定Null :

DoCmd.SetParameter "which_id", Null

答案 1 :(得分:1)

你不能。如果要在VBA中打开查询,则可以提供参数。但由于报告是唯一调用查询的人,因此查询将询问其参数。

如果您无法更改查询,则必须使用它。

答案 2 :(得分:0)

您可以使用语法Forms![form name]![control name]从将打开此报告的表单中引用参数值,因此需要更改类似的查询 从[表名]中选择*,其中time_id =表格![表格名称]![控制名称] 这将确保查询从表单的控件中获取参数,并且它不会提示参数。 但只有在打开/加载此表单时打开该查询才有效...否则会再次提示参数。

Access 2010中的Docmd.set参数似乎是一个非常好的建议,它保持灵活性和良好的编程。