VBA使用基于查询的参数运行Access Report

ced*_*r01 2 parameters ms-access vba access-vba

我想使用VBA脚本自动化一些访问报告。但是,当我要使用它们运行时DoCmd.OpenReport,我遇到了一个问题,即每个报表都有一些弹出窗口,其中包含一些来自基础查询的参数。

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

PARAMETERS [Time] Text ( 255 );
Run Code Online (Sandbox Code Playgroud)

我在Google上搜索了很多并尝试:

 DoCmd.OpenReport "B_My_Report", acViewPreview, , "[Time]= 423"
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。弹出窗口仍然出现,当我什么也不输入时,查询将失败,因为Time参数为空。

有没有一种方法可以用参数值调用报表。我读了很多关于完全删除Parameter并在中使用where条件的建议OpenReport。但是我无法更改这些查询,因为它们不是我制作和维护的。有时候我只需要运行它们。因此,我很想拥有一种无需触摸报表或查询的解决方案。

Han*_*sUp 5

如果您的Access版本> = 2010,请考虑使用DoCmd.SetParameter方法

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

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;
Run Code Online (Sandbox Code Playgroud)

因此,我可以为参数分配一个值,然后打开仅显示匹配记录的报告(id是主键):

DoCmd.SetParameter "which_id", 4
DoCmd.OpenReport "rptFoo",acViewReport
Run Code Online (Sandbox Code Playgroud)

或者,由于OR [which_id] Is Null查询WHERE子句中的条件,如果我希望包括所有记录而不管它们的id值如何,我可以在打开报表之前将Null分配给参数:

DoCmd.SetParameter "which_id", Null
Run Code Online (Sandbox Code Playgroud)

  • 非常酷,我对此一无所知。(我猜老狗和新花样) (2认同)