Печать отчетов в формате PDF в Access 2013, но с использованием фильтра цикла

#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
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:UsersTallahassee ClientDocumentsReportsReports Daily" amp; "AB_"
    MyFilename = Month(Now) amp; "." amp; Day(Now) amp; "." amp; Year(Now) amp; ".pdf"

    DoCmd.OpenReport "rptSales3_SingleRepPerPg_DailyReport_2", acViewPreview, "qrySales3", MyFilter
    DoCmd.OutputTo acOutputReport, "", acFormatPDF, MyPath amp; 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
  

Ответ №1:

Если вы добавите Debug.Print MyFilter после определения myFilter, вы увидите, что вы фильтруете отчет, чтобы он соответствовал буквальному тексту rec2 , а не соответствовал значению переменной с именем rec2. Измените строку фильтра на:

и посмотрите, есть ли у вас лучшие результаты.

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

    MyFilter = "Rep='" amp; Replace(rec1![Rep Name], "'", "''") amp; "'"
    MyPath = "C:UsersTallahassee ClientDocumentsReportsReports Daily" amp; "AB_"
    MyFilename = Month(Now) amp; "-" amp; Day(Now) amp; "-" amp; Year(Now) amp; ".pdf"

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

    rec1.MoveNext
Loop

Set rec1 = Nothing
  

таким образом, у вас есть один цикл, который вызывает OpenReport один раз для каждой записи в tblSalesPPL, используя текущее значение [Rep Name] в качестве фильтра для поля Rep отчета.

Комментарии:

1. : ( Все еще не работает. Access странно относится к двойным кавычкам в vba. Я получаю и ошибку компиляции, когда добавляю кавычки так, как вы это сделали: Ожидаемый: конец инструкции myFilter = «(((tblSales2.Rep) = ‘»»amp; rec2 amp;»»‘))» Отладка. Печать myFilter

2. : ( Все еще не работает. Access VBA странно относится к кавычкам. Если я использую предложенные кавычки, я получаю ожидаемую ошибку компиляции следующим образом: конец инструкции <br /> myFilter = «(((tblSales2.Rep)='»»amp; rec2amp;»»‘))» Отладка. Печать myFilter

3. Можете ли вы попробовать вставить отредактированный код сейчас? Необходимо сохранить пробелы вокруг знаков amp; .

4. Итак, я скопировал написанный вами код и вставил его … теперь у меня ошибка компиляции: метод или элемент данных не найден

5. Когда я получаю сообщение об ошибке в модуле vba, оно выделяется . [Имя представителя]