微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在执行 vba DoCmd.OutputTo 命令以创建报告的 PDF 时 Access 会关闭/重新打开

如何解决为什么在执行 vba DoCmd.OutputTo 命令以创建报告的 PDF 时 Access 会关闭/重新打开

我正在使用以下两行代码尝试创建过滤报告的 PDF。

DoCmd.OpenReport "rptContactDetails",acViewPreview,"contactsid=" & TempVars!RecordUnderEdit

DoCmd.OutputTo acOutputReport,"rptContactDetails",acFormatPDF,"D:\Temp\CurrentContactDetails.pdf"

如果省略第一行,则 DoCmd.OutputTo 命令可以正常工作,并正确创建完整报告的 PDF。但是,因为我想创建报告的过滤版本的 PDF,所以我首先打开它并应用过滤器(效果很好)。如果我这样做了,当 DoCmd.OutputTo 被执行时,Access 说它正在创建 PDF,但只是关闭并尝试重新打开,提示我保存数据库的备份。在目标目录中只创建了一个零长度的 .tmp 文件

我曾尝试用简单的数字contactsID 替换TempVar,但同样的事情发生了。我还在同一台 PC 上的另一个数据库中使用了完全相同的技术(几乎相同的代码),它工作得非常好,正确地创建了报告过滤版本的 PDF。我使用的是最新版本的 Access(Microsoft Access v16.0 对象库)。

任何关于可能发生的事情(为什么 Access 关闭)的建议都非常受欢迎 - 我是一个业余爱好者,而不是程序员/软件开发人员!

解决方法

根据 MS Access 文档 DoCmd.OutputTo,参数 ObjectName 实际上是可选的。如果留空,方法将输出活动对象。但是,要动态过滤输出报告,请不要使用打印预览 acViewPreview,而是使用报告视图 acViewReport

' OPEN IN REPORT VIEW
DoCmd.OpenReport "rptContactDetails",acViewReport,"contactsid=" & TempVars!RecordUnderEdit

' LEAVE OBJECTNAME BLANK
DoCmd.OutputTo acOutputReport,acFormatPDF,"D:\Temp\CurrentContactDetails.pdf"

' CLOSE REPORT
DoCmd.Close acReport,"rptContactDetails"
,

一种解决方案是将过滤作为查询定义的一部分进行管理 - 查询是报告的记录源。

报告来源于 qryABC。说它只是没有标准的表格。

然后使用添加条件的 sql 语句更改 qryABC 的查询定义,即红色小部件...您可以找到有关更改查询的查询定义的在线教程。

然后触发报告的导出。这是一个 2 步过程,但会起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。