创建单独的PDF报告 - 访问

时间:2015-10-29 22:45:04

标签: vba ms-access pdf report

我有一个有趣的要求。在Access(2010)中,我需要生成单独的PDF报告,其中唯一的ID在报告中,即 F9902_ReportName.pdf

以下代码可以成功生成单个报告,确切地说我希望它们如何工作,唯一的问题是它在运行时遇到资源限制。结果我收到以下错误:运行时错误'3035'。超出系统资源。如果我理解正确DoCmd.OpenReport& DoCmd.OutputTo都是打开报告,但只有一个在DoCmd.Close命令中关闭,另一个保持隐藏并保留资源,一旦循环处理大约400次,它就会达到资源限制。我查看了几个网页来解决这个问题,但每个人似乎都停留在这个特定的问题上。

问题是我只想使用DoCmd.OutputTo函数,但它不允许我按记录过滤(据我所知)这就是为什么我必须在它之前使用DoCmd.OpenReport

Private Sub Command526_Click()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim MyFileName As String
    Dim mypath As String
    Dim temp As String

    mypath = "C:\location\"

    Set db = CurrentDb()
    Set rs = db.OpenRecordset("SELECT * FROM [NameOfTable]", dbOpenDynaset)

    Do While Not rs.EOF

    temp = rs("Ref#")
    MyFileName = temp & "_PdfOutput.pdf"

    DoCmd.OpenReport "ReportName", acViewReport, , "[Ref#]='" & temp & "'"
    DoCmd.OutputTo acOutputReport, "", acFormatPDF, mypath & MyFileName
    DoCmd.Close acReport, "ReportName"

    rs.MoveNext
    Loop

    Set rs = Nothing
    Set db = Nothing

End Sub

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

一种方法是在打开报告时不过滤报告,但使用公共函数过滤其记录源。

在公共模块中,您有以下代码:

Dim strCurRef as string

Public Function GetCurrentRef() As String
    GetCurrentRef = strCurRef
End Function

Public Sub SetCurrentRef(strRef As String)
    strCurRef = strRef 
End Sub

您创建一个查询作为报告的记录源,按GetCurrentRef()过滤数据:

SELECT * FROM myTable WHERE [Ref#] = GetCurrentRef()

在将报告导出为PDF之前,您需要设置当前数据:

temp = rs("Ref#")
MyFileName = temp & "_PdfOutput.pdf"
Call SetCurrentRef(temp)

DoCmd.OutputTo acOutputReport, "ReportName", acFormatPDF, mypath & MyFileName
相关问题