Ms access DoCmd.OutputTo仅在中断时工作

Ms access DoCmd.OutputTo仅在中断时工作,ms-access,pdf,vba,Ms Access,Pdf,Vba,我在VBA Access 2013中遇到了一个具有挑战性的DoCmd.OutputTo命令问题 我有下面的代码,它基本上是打印一个特定的报告,从本质上说是一个报销记录的集合。其想法是,可以将活动记录(从活动表单)导出到PDF文件,然后将扫描的发票添加到PDF中 为此,我需要构建基本文件(即添加发票的PDF),然后运行添加单个文件的例程 以下代码应创建初始PDF文件: Dim rpt as Report filePath = "<some filepath>"

我在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"
Dim rpt作为报告
filePath=“”
fName=我!idDecl&“(脚本).pdf”
filePath=filePath&fName
设置rpt=报告\u qryDLINVOICE
带rpt
.Filter=“[fltID]=”&Me!身份证件
.FilterOn=True
以
DoCmd.OpenReport rpt.Name,acViewPreview,“[fltID]=”&Me!身份证件
DoCmd.OutputTo acOutputReport,rpt.Name,acFormatPDF,filePath,False
文档关闭一个报告,“QrydClinVoice”
如果我运行代码-没有中断-报告将按照筛选参数打开,但是,将记录输出到PDF的后续命令不会打开? 也就是说,出现了一个非常简短的对话框(无法读取它所说的内容),然后执行简单地停止,没有错误,没有错误代码,只是一个干净的中断

现在来看有趣的一点。。 如果我在DoCmd.OutputTo行上设置一个断点,并用F8执行该行,那么代码的工作或多或少是完美的(见下文)??似乎中断允许预览例程先完成,然后运行输出例程

除上述挑战外,在某些报告(即某些报销)上,它工作正常,文件已创建,而在其他报告上,它根本不创建初始PDF,代码中断,没有错误代码或故障报告。报告之间没有明显的区别

我曾尝试通过休眠OpenReport函数1000毫秒来延迟它的输出,但这不起作用(即使高达5000毫秒也不会产生结果)

另外,如果我删除open preview行并只执行OutputTo行,而不首先打开预览,那么它仅在中断并使用F8执行时有效,并且仅在某些报告上有效不是全部

OutputTo命令似乎有点不可靠(至少在我的例子中是这样):)


有什么建议吗???

好的,看看发生了什么

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

报告中/报告上的一段VBA代码,根据分组重新创建页码(即重新开始每个组的页码)。在报告中执行此VBA(即打开或翻页)会干扰“输出”例程的执行。上述操作干扰了输出例程,导致其中断,尽管还不确定原因-

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

增加了一些细节:

  • 不再需要预览了
  • 从VBA设置报告的过滤器,并通过report 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
Dim rpt作为报告
filePath=“”
fName=我!idDecl&“(脚本).pdf”
filePath=filePath&fName
'Debug.Print文件路径
设置rpt=报告\u qryInvoice
带rpt
.Filter=“[fltID]=”&Me!身份证件
.FilterOn=True
以
“睡眠(5000)
DoCmd.OutputTo acOutputReport,rpt.Name,acFormatPDF,filePath,False,,acExportQualityScreen

GD All,好的,知道发生了什么;错误报告根据分组创建了多个页面。报告中/上的VBA代码,基于分组重新创建页码(即重新开始每个组的页码)。报告中VBA的执行(即打开或翻页)会干扰输出例程的执行上述两种情况都会干扰输出例程,虽然不确定为什么,但删除报告中的所有VBA代码解决了问题!!很好-为什么不加上这个作为回答,问答式?