Ms access 在Access 2013中将报告打印为PDF,但使用循环过滤器

Ms access 在Access 2013中将报告打印为PDF,但使用循环过滤器,ms-access,vba,Ms Access,Vba,我需要反复打印同一份报告,但每个报告的名称不同。我的报告打印为空白。不确定如何让代码循环表中的名称并将这些名称用作报表的筛选器。请参阅下面的代码。似乎是和rec2的问题 Option Compare Database Option Explicit Sub PrintSingleRepPerPgDailyReportToPDF() On Error GoTo PrintToPDF_Err Dim dadb As DAO.Database Dim rec1 As DAO.Recordset Di

我需要反复打印同一份报告,但每个报告的名称不同。我的报告打印为空白。不确定如何让代码循环表中的名称并将这些名称用作报表的筛选器。请参阅下面的代码。似乎是和rec2的问题

Option Compare Database
Option Explicit

Sub PrintSingleRepPerPgDailyReportToPDF()
On Error GoTo PrintToPDF_Err
Dim dadb As DAO.Database
Dim rec1 As DAO.Recordset
Dim rec2 As DAO.Recordset
Dim MyFilter As String
Dim MyPath As String

Dim MyFilename As String
Set dadb = CurrentDb
Set rec1 = dadb.OpenRecordset("tblSalesPPL", dbOpenTable)
Do While rec1.EOF = False
    Set rec2 = dadb.OpenRecordset("Select [Rep Name] from tblSalesPPL")

    MyFilter = "(((tblSales2.Rep)='rec2'))"
    MyPath = "C:\Users\Tallahassee Client\Documents\Reports\Reports Daily\" & "AB_"
    MyFilename = Month(Now) & "." & Day(Now) & "." & Year(Now) & ".pdf"

    DoCmd.OpenReport "rptSales3_SingleRepPerPg_DailyReport_2", acViewPreview, "qrySales3", MyFilter
    DoCmd.OutputTo acOutputReport, "", acFormatPDF, MyPath & MyFilename, True
    DoCmd.Close acReport, "rptSales3_SingleRepPerPg_DailyReport_2"

    PrintToPDF_Exit:
    Exit Sub

    PrintToPDF_Err:
    MsgBox Error$
    Resume PrintToPDF_Exit

    Set rec2 = Nothing
    rec1.MoveNext
Loop

End Sub
如果在定义MyFilter后添加Debug.Print MyFilter,您将看到您正在筛选报告,以匹配文本rec2,而不是匹配名为rec2的变量的值。将筛选行更改为:

看看你是否有更好的结果

Set dadb = CurrentDb
Set rec1 = dadb.OpenRecordset("tblSalesPPL", dbOpenTable)
Do While rec1.EOF = False

    MyFilter = "Rep='" & Replace(rec1![Rep Name], "'", "''") & "'"
    MyPath = "C:\Users\Tallahassee Client\Documents\Reports\Reports Daily\" & "AB_"
    MyFilename = Month(Now) & "-" & Day(Now) & "-" & Year(Now) & ".pdf"

    DoCmd.OpenReport "rptSales3_SingleRepPerPg_DailyReport_2", acViewPreview, "qrySales3", MyFilter
    DoCmd.OutputTo acOutputReport, "", acFormatPDF, MyPath & MyFilename, True
    DoCmd.Close acReport, "rptSales3_SingleRepPerPg_DailyReport_2"

    rec1.MoveNext
Loop

Set rec1 = Nothing

这样,您就有了一个循环,可以使用[Rep Name]的当前值作为报告的Rep字段的筛选器,对tblSalesPPL中的每条记录调用OpenReport一次。

:无法继续工作。vba中双引号的访问很奇怪。当我按您的方式添加引号时,我收到一个编译错误:预期:语句结束MyFilter=tblSales2.Rep='&rec2&'Debug.Print MyFilter:无法正常工作。Access VBA对引号的使用很奇怪。如果建议的引号出现如下预期的编译错误:语句末尾MyFilter=tblSales2.Rep='&rec2&'Debug.Print MyFilter现在可以粘贴编辑过的代码吗?您需要保留&符号周围的空格。因此,我复制了您编写的代码并将其放入…现在我有一个编译错误:找不到方法或数据成员当我在vba模块中得到该错误时,它会突出显示。[代表姓名]