Экспорт отчета MS Access в PDF в зависимости от условия

Есть ли способ экспортировать отчет в MS Access в PDF на основе определенных критериев/полей в отчете?

Я создал отчет о производительности в MS Access. Вместо того, чтобы экспортировать 50 страниц в 1 PDF, есть ли способ экспортировать на основе имени менеджера? Поле для имени менеджера включено в фактический отчет.


person JT2013    schedule 27.06.2014    source источник
comment
Отчет загружает только 1 менеджера за прогон? Обработчики событий для отчета могут быть сложными, поэтому я не уверен в использовании фактического отчета. Если бы мы могли заранее уточнить имя менеджера, я думаю, это было бы проще всего. (Возможно запрос?)   -  person Mark C.    schedule 27.06.2014
comment
@overmind У меня есть все данные, которые есть в форме, в одной таблице (включая имена менеджеров).   -  person JT2013    schedule 27.06.2014
comment
Отчет за 1 менеджера? Или все?   -  person Mark C.    schedule 27.06.2014


Ответы (1)


Вы можете взять эту идею и поиграть с ней. Вставьте это в модуль

Option Explicit

Dim g_ManagerReportFilterEnabled As Boolean
Dim g_ManagerReportFilter As String

Public Function IsManagerReportFilterEnabled() As Boolean
    IsManagerReportFilterEnabled = g_ManagerReportFilterEnabled
End Function

Public Function GetManagerReportFilter() As String
    GetManagerReportFilter = g_ManagerReportFilter
End Function

Public Sub ExportFilteredManagerReportToPDF(strManagerName As String)
On Error GoTo ExportFilteredManagerReportToPDF_ErrorHandler

    g_ManagerReportFilterEnabled = True
    g_ManagerReportFilter = "[MyManagerNameField] = " & Chr(34) & strManagerName & Chr(34)
    DoCmd.OutputTo acOutputReport, "MyReportName", acFormatPDF, "MyPath:\MyFileName.PDF", False

    GoTo ExitMe

ExportFilteredManagerReportToPDF_ErrorHandler:
    Debug.Print err.Number & ": " & err.Description
ExitMe:
    g_ManagerReportFilterEnabled = False
    Exit Sub

End Sub

и просмотрите переменные, которые необходимо заменить. И это в Report_Open вашего отчета:

Private Sub Report_Open(Cancel As Integer)

    If IsManagerReportFilterEnabled = True Then
        Me.Filter = GetManagerReportFilter
        Me.FilterOn = True
    End If

End Sub

Таким образом, проблема, которую пытается решить этот код, заключается в том, что мы хотим использовать DoCmd.OutputTo для вывода нашего PDF-файла, но он не принимает параметр Filter. Поэтому мы обходим это, устанавливая две глобальные переменные (я знаю...), которые сообщают нам, следует ли нам использовать фильтр менеджера и что это за фильтр. Когда мы запускаем ExportFilteredManagerReportToPDF и передаем имя, подпрограмма выводит отчет в PDF. Из-за кода, прикрепленного к отчету, при запуске OutputTo отчет определяет, включен ли фильтр, и, если да, применяет его. Затем OutputTo завершает свою работу, и PDF-файл выводится.

Чтобы запустить это для менеджера Джона Смита, скажем, вы можете запустить это из окна отладки:

 ExportFilteredManagerReportToPDF "John Smith"
person VBlades    schedule 28.06.2014