访问VBA代码以打印每条记录的单个PDF - 在第10条记录处停止

时间:2013-05-28 18:29:44

标签: ms-access access-vba

我的问题是关于我必须将Access报告打印到PDF文件的代码。我需要为每个组提供单独的PDF,以便我可以向每个组发送他们的销售,并且只发送他们的销售。该报告打印出每件售出的商品和销售细节。我的代码工作,但在第10次分组后它停止并给我错误代码3048:无法打开任何更多的数据库。我在另一个线程上读到访问限制为2048个引用,但是我的数据集并不是那么大。我的代码如下(我已将报告名称REPORT和组标识符GROUP标记为GROUP,我的QUERY从2个表中提取):

Private Sub Report_Click()

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim MyFileName As String
    Dim mypath As String
    Dim temp As String


    mypath = "PATH\Access PDF Testing\"

    Set db = CurrentDb()

    Set rs = db.OpenRecordset("SELECT [GROUP] FROM [QUERY]", dbOpenSnapshot)

    Do While Not rs.EOF

        temp = rs("GROUP")
        MyFileName = rs("GROUP") & ".PDF"

        DoCmd.OpenReport "REPORT", acViewReport, , "[GROUP]='" & temp & "'"
        DoCmd.OutputTo acOutputReport, "", acFormatPDF, mypath & MyFileName
        DoCmd.Close acReport, "REPORT"
        DoEvents

        rs.MoveNext
    Loop


    rs.Close
    Set rs = Nothing
    Set db = Nothing

End Sub

它可以工作,但在将10个组打印到PDF后,它会失败。我尝试只运行名字中没有特殊字符的组,我发现强制分页符,但没有什么能超过第10组记录。每组中大约有10-20行。是否有任何人可以提供关于我能以不同方式做什么的见解?

1 个答案:

答案 0 :(得分:0)

你说“每个组中大约有10-20行”。但是,您的OpenRecordset没有distinct子句,这意味着它会从REPORT中提取每一条记录。也许你实际上是开放出口每个报告10-20次而不只是一次?

尝试:

Set rs = db.OpenRecordset("SELECT distinct [GROUP] FROM [REPORT]", dbOpenSnapshot)

(如果按照我认为的方式运行,你将被置于2048限制之下并且运行速度会快得多。但它仍然没有向我解释为什么这个限制甚至是一个问题,因为你关闭每个报告就在你做完之后)