从 DoCmd OpenReport 打印报表时触发 Microsoft Access 中的事件

Posted

技术标签:

【中文标题】从 DoCmd OpenReport 打印报表时触发 Microsoft Access 中的事件【英文标题】:Trigger an event in Microsoft Access when a report is printed from DoCmd OpenReport 【发布时间】:2011-10-20 16:25:39 【问题描述】:

我正在尝试在使用 DoCmd OpenReport 运行的报告上运行脚本。我不是在预览报告,而是直接将其发送到打印机。似乎当您这样做时,报告的任何事件都不会被触发。无论如何在报告打印时触发类似 OnLoad 的东西?

【问题讨论】:

【参考方案1】:

将发生开放事件:http://msdn.microsoft.com/en-us/library/aa211439(office.11).aspx

【讨论】:

这当然适用于表单,但是当我从 VBA 脚本打印报表时,我需要知道如何在报表上触发事件。如果报表以预览模式打开,则会触发 onLoad 等事件,但如果在不查看报表表单的情况下打印报表,则不会触发。 @mackeyka 打开事件适用于报告和表单。这在链接的“适用于”中进行了说明。 这是真的,但我的问题是,当使用以下命令从 VBA 脚本打印报告时: DoCmd.OpenReport stDocName, acNormal, , stLinkCriteria 报告实际上并没有在屏幕上打开(例如在打印预览中)首先不会触发任何通常会发生的事件。 试试看。将MsgBox "Hello"放入open事件中,运行VBA打开,会弹出消息框。另外,当您从 VBA 运行时,我绝不清楚为什么要在报告中添加代码。您可以在打印行之后分支到您想要的任何代码。 试过了。 OnOpen 适用于从 VBA 进行打印预览,但如果报告直接发送到打印机则不会触发。报表很复杂,子表单很多。根据报告是针对 A 组还是 B 组,一个部分会有所不同。我要运行的代码将根据报告针对的组选择要在该位置打印的子表单。报告上有一个字段,用于标识报告用于哪个组,并且报告上的代码使用该字段来确定要打印的子表单。整个数据库很大,我不想在该做的时候再放一份报告。【参考方案2】:

我也遇到过类似的问题,先打开隐藏的报告解决了:

DoCmd.OpenReport "ReportName", acViewReport, , strCriteria, acHidden

然后将其发送到打印机并关闭报告。

【讨论】:

这个版本对我有用。将 DoCmd.OpenReport stDocName, acNormal, , stLinkCriteria 更改为 DoCmd.OpenReport stDocName, acViewReport, , stLinkCriteria。但无法使用 acHidden,因为它打印了一个不同的打开表单,而不是刚刚打开的报告。所以报告会在屏幕上闪烁,但用户只能忍受一段时间,直到我弄清楚为什么它会打印出错误的东西。

以上是关于从 DoCmd OpenReport 打印报表时触发 Microsoft Access 中的事件的主要内容,如果未能解决你的问题,请参考以下文章

从 DoCmd.OpenReport 将参数传递给 Access 2010 报告

根据组合框输入打开报表

将日期从表单传递到 Docmd.openreport 的问题

在没有打印预览或打开报表的情况下从 Access 中的表单打印报表?

使用数组过滤器打开报表

如何将 Microsoft Access 表单中的单个记录打印到报表中