我在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执行该行,代码或多或少完美无缺(见下文)?似乎break允许预览例程首先完成,然后运行OutputTo例程。
除了上述挑战之外,在一些报告(即一些报销)上它工作正常并且文件在其他报告上创建它根本不创建初始PDF并且代码中断没有错误代码或故障报告。如果报告之间没有明显区别吗?
我已经尝试将OutputTo从OpenReport函数延迟1000ms,但这不起作用(即使高达5000ms也不会产生结果)
此外,如果我删除打开预览行并只执行OutputTo行,而不先打开预览,它只有在使用F8打破并执行时才会起作用,而且只在某些报告上不是全部?
看起来OutputTo命令至少在我的情况下 - 有点不可靠: - )
有什么建议吗?
答案 0 :(得分:2)
好的,发现发生了什么事;
我提到的错误报告根据分组创建了多个页面。
报告中/上的VBA代码部分,基于分组重新创建页码(即每个组启动时重新启动的页码编号。)在报告中执行此VBA(即打开或在页面上) )干扰“OutputTo”例程的执行。上面干扰了OutputTo例程,导致它中断,但不确定为什么-yet -
删除报告中的所有VBA代码解决了问题!!
一些补充细节:
在下面找到工作代码:
Dim rpt as Report
filePath = "<somepath>"
fName = Me!idDecl & "-(script).pdf"
filePath = filePath & fName
'Debug.Print filePath
Set rpt = Report_qryInvoice
With rpt
.Filter = "[fltID]= " & Me!id
.FilterOn = True
End With
'Sleep (5000)
DoCmd.OutputTo acOutputReport, rpt.Name, acFormatPDF, filePath, False, , , acExportQualityScreen