Ms access 基于查询的带参数VBA运行访问报告

Ms access 基于查询的带参数VBA运行访问报告,ms-access,parameters,vba,Ms Access,Parameters,Vba,我想用VBA脚本自动化一些Access报告。但是,当我想用DoCmd.OpenReport运行它们时,我遇到了一个问题,即每个报表都有一个弹出窗口,用于显示来自底层查询的一些参数 这是查询中参数的外观: PARAMETERS [Time] Text ( 255 ); 我在谷歌上搜索了很多,并尝试了: DoCmd.OpenReport "B_My_Report", acViewPreview, , "[Time]= 423" 但这不起作用;弹出窗口仍然会出现,当我不输入任何内容时,查询将失败

我想用VBA脚本自动化一些Access报告。但是,当我想用
DoCmd.OpenReport
运行它们时,我遇到了一个问题,即每个报表都有一个弹出窗口,用于显示来自底层查询的一些参数

这是查询中参数的外观:

PARAMETERS [Time] Text ( 255 );
我在谷歌上搜索了很多,并尝试了:

 DoCmd.OpenReport "B_My_Report", acViewPreview, , "[Time]= 423"
但这不起作用;弹出窗口仍然会出现,当我不输入任何内容时,查询将失败,因为时间参数为空


是否有一种方法可以使用参数值调用报告。我读了很多关于完全删除参数并在
OpenReport
中使用
where
条件的建议。但我无法更改这些查询,因为它们不是由我创建和维护的。我只是偶尔需要运行它们。因此,我希望有一个不涉及报告或查询的解决方案。

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


如果您不能更改查询,则必须使用它。

< P>如果您的访问版本为> 2010,请考虑.< /P> 此查询是我的报告的记录源:

长的参数;
选择rmy.id、rmy.reportDate、rmy.gainOrLoss
根据记录,产量为rmy
其中rmy.id=[which_id]或[which_id]为空;
因此,我可以为参数分配一个值,并打开仅显示匹配记录的报告(
id
是主键):

DoCmd.SetParameter“which_id”,4
DoCmd.OpenReport“rptFoo”,acViewReport
或者,由于查询的
WHERE
子句中的
或[which_id]为Null
条件,如果我希望包括所有记录,而不管它们的
id
值如何,我可以在打开报告之前为参数指定Null:

DoCmd.SetParameter“which_id”,Null

您可以从使用语法表单打开此报告的表单中引用参数值![表格名称]![控件名称],因此需要更改查询,如 从[table name]中选择*,其中time\u id=表单![表格名称]![控制名称] 这将确保查询从窗体的控件获取参数,并且不会提示参数。 但只有在表单保持打开/加载状态时打开该查询,它才会工作……否则它将再次提示like参数


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

非常酷,我不知道这一点。(我猜是老把戏和新把戏)在我注意到
SetParameter
之前,我已经使用Access 2010好几年了。它只在少数情况下有用,但这是其中之一。:-)好建议!我从来不知道那个命令。未来的观众还有一个想法:我需要的是将报告输出到使用带参数查询的PDF。如果不先打开文件,我无法直接输出文件。因此,我为每个参数调用了
DoCmd.SetParameter
,然后调用
DoCmd.OpenReport“reportName”、acViewPreview、acHidden
,以在隐藏时打开报告,然后调用
DoCmd.OutputTo“reportName”、acFormatPDF、filePath
以将其输出为PDF。