2017-08-02 30 views
0

我想为每个ID打印我的Access 2010报告。单独打印到PDF使用VBA编号

比方说我的报告结构是这样的:

ID1, Name1, phone1, address1, 

ID1, Name2, phone2, address2, 

ID2, Name, phone, address, 

ID3, Name1, phone1, address1, 

ID3, Name2, phone2, address2, 

我想是每个ID被写入到一个单独的.pdf文件是这样的:

ID1.pdf包含:

ID1, Name1, phone1, address1, 

ID1, Name2, phone2, address2, 

ID2.pdf包含:

ID2, Name, phone, address, 

ID3.pdf包含:

ID3, Name1, phone1, address1, 

ID3, Name2, phone2, address2, 

我创建了下面的代码:

Private Sub PrintPDF_Click() 

Dim rst As DAO.Recordset 
Dim OutputFile As String 
Dim FileSavePath As String 

FileSavePath = "C:\Test\" 
Set rst = CurrentDb.OpenRecordset("SELECT distinct ID FROM Report_Query ORDER BY _ID") 
With rst 
Do Until .EOF 

DoCmd.OutputTo acOutputReport, Bericht1, acFormatPDF, FileSavePath & ![ID] & ".pdf", True 

.MoveNext 

Loop 

End With 

End Sub 

命名一直运作良好,但它打印的所有记录。我有ID1.pdf,ID2.pdf和ID3.pdf,但每个文件都包含所有记录。

如何为每个ID生成一个文件?

+1

在记录集循环 - 打开报告过滤到单个ID,输出报告,关闭报告,移动到下一个记录,打开报告过滤到单个ID,输出报告,关闭报告,移动... – June7

+0

你可以执行每个ID的查询。像'SELECT distinct ID FROM Report_Query where ID ='ID1'ORDER BY _ID' – Maddy

+0

你有外循环,它迭代所有的ID。在'DoCmd.OutputTo ...'行之前,输入另一个查询。就像'我想从report_query中选择数据,其中ID = rst.ID' ....也摆脱了'用rst ... End With'并使用'Do Until rst.EOF'和'rst.MoveNext' – jsotola

回答

0

试试这个方法。

1)提取所有不同的ID

2)转换记录到阵列

3)循环通过阵列的每个ID

4)保存到PDF

未测试

Private Sub PDF_Click() 
    Dim rst As DAO.Recordset 
    Dim OutputFile As String 
    Dim FileSavePath As String 
    Dim vArray As Variant 
    Set rst = CurrentDb.OpenRecordset("SELECT distinct ID FROM Report_Query ORDER BY ID") 
    With rst 
     .MoveLast 
     .MoveFirst 
     vArray = .GetRows(.RecordCount) 
    End With 
    For Each ID In vArray 
     FileSavePath = "C:\Test\" & Format(ID, "000000") & ".pdf" 
    ' execute Query here 
    '("select * from Report_Query where ID = " & ID) 
    'save recordset in PDF format here 
    Next ID 
    End Sub