#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, оно выделяется . [Имя представителя]