创建个人PDF报告-访问



我有一个有趣的需求。在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

非常感谢您的帮助。

一种方法是在打开报表时不过滤它,而是使用公共函数过滤它的记录源。

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

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

最新更新