【发布时间】:2014-10-03 21:06:35
【问题描述】:
我在 VBA Access 2013 中的 DoCmd.OutputTo 命令遇到了一个具有挑战性的问题。
我有下面的代码,它基本上是从本质上是报销记录的集合中打印一个特定的报告。这个想法是,可以将活动记录(从活动表单)[导出]到 PDF 文件,然后将扫描的发票添加到 PDF。
为此,我需要构建基本文件(即添加发票的 PDF),然后运行添加单个文件的例程。
以下代码应创建初始 PDF 文件:
Dim rpt as Report
filePath = "<some filepath>"
fName = Me!idDecl & " - (script).pdf"
filePath = filePath & fName
Set rpt = Report_qryDeclInvoice
With rpt
.Filter = "[fltID]= " & Me!id
.FilterOn = True
End With
DoCmd.OpenReport rpt.Name, acViewPreview, , "[fltID]= " & Me!id
DoCmd.OutputTo acOutputReport, rpt.Name, acFormatPDF, filePath, False
DoCmd.Close acReport, "qryDeclInvoice"
如果我运行代码 - 没有中断 - 报告会根据过滤后的参数打开,但是,将记录输出到 PDF 的后续命令不会? 也就是说,出现一个非常短暂的对话框(看不懂它说什么)然后执行就停止了,没有错误,没有错误代码,只是一个干净的休息?
现在是有趣的一点.. 如果我在 DoCmd.OutputTo 行上设置断点,并使用 F8 执行该行,则代码或多或少完美无缺(见下文)?似乎中断允许预览例程首先完成,然后运行 OutputTo 例程。
除了上述挑战之外,在某些报告(即某些报销)上,它运行良好并且文件已创建,但在其他报告中,它根本不创建初始 PDF,并且代码在没有错误代码或故障报告的情况下中断.报告之间没有明显区别?
我尝试通过将 OpenReport 函数的 OutputTo 休眠 1000 毫秒来延迟它,但这不起作用(即使长达 5000 毫秒也不会产生结果)
此外,如果我删除打开的预览行并只执行 OutputTo 行,而不先打开预览,它仅在使用 F8 中断和执行时才有效,并且仅适用于某些报告而不是全部?
OutputTo 命令似乎 - 至少在我的情况下 - 有点不可靠:-)
有什么建议吗??
【问题讨论】:
-
GD 所有人,好的,知道发生了什么;错误报告基于分组创建了多个页面。报表中/上的 VBA 代码,基于分组重新创建页码(即为每个组的开始重新开始页码。)报表中的 VBA 执行(即在打开或页面上)会干扰 OutputTo 的执行例程以上都干扰了 OutputTo 例程,但不确定为什么 - 仍然 - 删除报告中的所有 VBA 代码解决了这个问题!
-
优秀 - 为什么不将其添加为答案,问答风格?