DoCmd.OutputTo仅适用于break

时间:2014-08-11 05:38:43

标签: pdf access-vba

我在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命令至少在我的情况下 - 有点不可靠: - )

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

好的,发现发生了什么事;

我提到的错误报告根据分组创建了多个页面。

报告中/上的VBA代码部分,基于分组重新创建页码(即每个组启动时重新启动的页码编号。)在报告中执行此VBA(即打开或在页面上) )干扰“OutputTo”例程的执行。上面干扰了OutputTo例程,导致它中断,但不确定为什么-yet -

删除报告中的所有VBA代码解决了问题!!

一些补充细节:

  • 不再需要预览
  • 从VBA设置报告的过滤器,并通过报告object.name
  • 打开报告

在下面找到工作代码:

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