2012-12-20 34 views
3

我从网站前一阵子以下VBA代码:拆分MS-Access报表转换成PDF的

Private Sub btnCreatePDF_Click() 
    Dim MyPath As String 
    Dim MyFilename As String 
    MyPath = "D:\reports\" 
     MyFilename = "KS1.pdf" 
    'Open report preview and auto-save it as a PDF 
     DoCmd.OpenReport "Rpt_KS1", acViewPreview 
     DoCmd.OutputTo acOutputReport, "", acFormatPDF, MyPath & MyFilename, False 'Change false to true here to auto-open the saved PDF 
    'Close the previewed report 
     DoCmd.Close acReport, "Rpt_KS1" 
End Sub 

这是在MS Access中使用创建的报告,一个单一的PDF(包含多达30页),并为我需要的工作正常工作。但是,我现在需要将报告分成30页左右的页面,并为每个页面创建一个pdf。任何想法如何做到这一点? 我在报告中的“用户名”或可以添加一个唯一的ID,如果这有助于它们分割等

回答

2

使用Docmd.OpenReport的第四个参数(WhereCondition)。使用WhereCondition,执行添加Where查询时通常会执行的操作,但不包括Where这个词。这将使报告仅显示与WhereCondition匹配的记录。

将您的唯一标识符列表检索到某种集合或记录集中,然后执行循环。这个例子假设你将它们放在一个名为uniqueIds的集合中,几乎肯定会需要你进行一些修改。

Dim MyPath As String 
Dim MyFilename As String 
MyPath = "D:\reports\"  
'Loop structure may vary depending on how you obtain values 
For each uniqueId in uniqueIds 
    MyFilename = "KS1" & uniqueId & ".pdf" 
'Open report preview and auto-save it as a PDF 
    DoCmd.OpenReport "Rpt_KS1", acViewPreview, , "uniqueField = " & uniqueID 
    DoCmd.OutputTo acOutputReport, "", acFormatPDF, MyPath & MyFilename, False 
'Close the previewed report 
    DoCmd.Close acReport, "Rpt_KS1" 
Next uniqueId 

严格地说,这可能不会导致每页的不同PDF。但是它会为每个uniqueID生成一个不同的PDF,这可能是每个页面都取决于您的数据。

+0

感谢您的回复。我在这里得到了基本的想法,所以我创建了一个记录集,并且,我一直在循环中遇到“For each”的错误,我用“Do Until rs.EOF”进行了操作。但!现在的问题是,虽然报告被分成了pdf,报告中的每个页面都是一个单独的pdf(就像我想的那样),但pdf中的报告实际上是空白的!有关可能会发生什么的任何建议? – detjo

+0

bump .......... – detjo

+0

我只能猜测,当你使用过滤器调出你的报告时,你无意中提供了一个没有记录匹配的值。也许你在uniqueID或uniqueField中有空格或其他东西。我会调查解决这个问题。 –