Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 访问VBA代码以打印每条记录的单独PDF-在第10条记录处停止_Ms Access_Vba - Fatal编程技术网

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

Ms access 访问VBA代码以打印每条记录的单独PDF-在第10条记录处停止,ms-access,vba,Ms Access,Vba,我的问题是关于代码,我必须打印PDF文件的访问报告。我需要每个小组的个人PDF,以便我可以向每个小组发送他们的销售额,并且只发送他们的销售额。该报告打印出每件售出的商品以及销售的详细信息。我的代码可以工作,但是在第10次分组后,它停止并给我错误代码3048:无法打开更多的数据库。我在另一个线程上读到access有2048个引用的限制,但是我的数据集并没有那么大。我的代码如下:我已经标记了我的报告名称report和group identifier group,我的查询从两个表中提取: Privat

我的问题是关于代码,我必须打印PDF文件的访问报告。我需要每个小组的个人PDF,以便我可以向每个小组发送他们的销售额,并且只发送他们的销售额。该报告打印出每件售出的商品以及销售的详细信息。我的代码可以工作,但是在第10次分组后,它停止并给我错误代码3048:无法打开更多的数据库。我在另一个线程上读到access有2048个引用的限制,但是我的数据集并没有那么大。我的代码如下:我已经标记了我的报告名称report和group identifier group,我的查询从两个表中提取:

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-20行。关于我可以做什么不同的事情,有没有人能提供一些见解?

你说每组大约有10-20行。然而,您的OpenRecordset并没有一个DISTINCE子句,这意味着它会从报告中提取每一条记录。也许您实际上要将每个报表导出10-20次,而不是一次

尝试:


如果按照我认为的方式运行,您将回到2048年的限制下,它将运行得更快。但它仍然没有向我解释为什么这个限制甚至是一个问题,因为您在生成每个报告后立即关闭该报告

您是否仔细阅读了代码并查看了发送到输出的值?我还知道,有时在开始循环迭代之前,必须将MoveLast和MoveFirst推送到记录集,以确保它位于数据的顶部。希望有帮助!嗨,艾伦,谢谢你的回答。看起来OutPutTo语句的一切都应该正常工作:DoCmd.OutPutTo acOutputReport、acFormatPDF、mypath和MyFileName-这是调试器突出显示的部分,当我进入代码并检查值时,它看起来很好。我在dowhilenot循环的正上方添加了rs.MoveFirst,它实际上帮助了我,它给了我3个pdf文件,但随后给了我一个错误3014无法打开更多的表。是哪个命令弹出了错误?我猜是OpenReport?如果还没有,请尝试一件事,将报表数据源指向一个查询,该查询只从表中提取所有字段,但将查询属性编辑为表错误的快照记录集类型,DoCmd.OpenReport POV Sales by Dealer,acViewReport,[DBA]='&temp&',这就是弹出错误的原因。我已经设置了rs=db.OpenRecordsetSELECT distinct[GROUP]FROM[QUERY],dbOpenSnapshot我刚刚意识到我在上面的代码中将其误述为报告而不是查询,我将对此进行更改,这里还有其他部分需要更改吗?PowerUser,非常感谢!这帮了大忙!它工作得很好,而且速度快得多。看起来我在为每个小组打开报告10-20次,因为现在打印框不再闪烁几次,而是每页闪烁一次。我有191个组要拉,我得到了169个,这给了我一个错误,它无法打开更多的表。考虑到我有这么多的报表要拉,我只是达到了极限吗?我最好的猜测是,代码没有从内存中释放报表对象,即使您正在关闭它们。尝试用报表对象替换DoCmd方法。将有更多的代码需要维护,但您将拥有更多的控制权。如果可以的话,我会自己做的,但我现在没有时间。对不起,我会试试这个解决方案,非常感谢您的帮助。
Set rs = db.OpenRecordset("SELECT distinct [GROUP] FROM [REPORT]", dbOpenSnapshot)