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