将MS-Access报告拆分为pdf

时间:2012-12-20 01:45:38

标签: ms-access access-vba

我刚才从网上获得了以下VBA代码:

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,如果这有助于拆分它们等。

1 个答案:

答案 0 :(得分:2)

使用Docmd.OpenReport的第4个参数(WhereCondition)。使用WhereCondition,在添加查询位置时,通常会执行通常所做的操作,但不要包含单词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不同。但它会为每个唯一ID生成不同的PDF,这可能是每个页面,具体取决于您的数据。