2012-12-20 64 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中有空格或其他東西。我會調查解決這個問題。 –