创建个人 PDF 报告 - Access
Creating Individual PDF Reports - Access
我有一个有趣的要求。在 Access (2010) 中,我需要生成单独的 PDF 报告,其中唯一 ID 在报告中,即 F9902_ReportName.pdf
下面的代码可以准确地生成我希望它们如何工作的单独报告,唯一的问题是它在 运行 时达到了资源限制。结果我收到以下错误:运行-time error '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
非常感谢任何帮助。
一种方法是在打开报表时不过滤报表,而是使用 public 函数过滤其记录源。
在 public 模块中,您有以下代码:
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
我有一个有趣的要求。在 Access (2010) 中,我需要生成单独的 PDF 报告,其中唯一 ID 在报告中,即 F9902_ReportName.pdf
下面的代码可以准确地生成我希望它们如何工作的单独报告,唯一的问题是它在 运行 时达到了资源限制。结果我收到以下错误:运行-time error '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
非常感谢任何帮助。
一种方法是在打开报表时不过滤报表,而是使用 public 函数过滤其记录源。
在 public 模块中,您有以下代码:
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