Получить заголовок закрытого отчета

#ms-access #reporting #vba

#ms-access #отчетность #vba

Вопрос:

У меня есть пользовательский диалог печати сборки, который используется для многих отчетов. Его аргументами являются имя отчета, строка фильтра, открытые аргументы для отчета и т.д. Что я хотел бы сделать, так это отобразить заголовок отчета, указанного для печати в форме. По соображениям производительности я бы предпочел не открывать отчет, получить заголовок и снова закрыть его. Я бы предпочел каким-то образом получить его из базы данных, фактически не открывая сам отчет.

Одна вещь, которая ДЕЙСТВИТЕЛЬНО работает, — это вызвать отчет, используя его имя класса report_some_report.caption , но нет способа сделать это без имени отчета, хранящегося в переменной. Я бы ожидал Reports("some_report").caption , что он также будет работать, но он работает только для открытых отчетов.

Есть ли лучший способ сделать это или мне придется сделать что-то вроде следующего? (Который работает)

 docmd.OpenReport "schedule_simple",acViewDesign,,,acHidden
strCaption = Reports("schedule_simple").Caption
docmd.Close acReport,"schedule_simple"
  

Ответ №1:

Невозможно получить заголовок отчета из отчета без предварительного открытия отчета или использования объекта класса отчета (как вы знаете). Также стоит отметить, что «облегченные» отчеты (т. Е. Те, У которых свойство HasModule = False ) не имеют объектов класса.

У вас есть несколько вариантов.

  1. Вы можете создать локальную таблицу с полем RptName и RptCaption и запросить ее. Конечно, тогда вам нужно как-то обновлять его.
  2. Вы могли бы написать функцию, которая «запоминает» результаты, так что вам нужно открывать данный отчет только один раз при каждом запуске программы. Например: .

     Function GetReportCaption(RptName As String) As String
    Static RptCaptions As Collection
    
        If RptCaptions Is Nothing Then Set RptCaptions = New Collection
        On Error Resume Next
        GetReportCaption = RptCaptions(RptName)
        If Err.Number = 0 Then Exit Function
        On Error GoTo 0
    
        DoCmd.OpenReport RptName, acViewDesign, , , acHidden
        RptCaptions.Add Reports(RptName).Caption, RptName
        DoCmd.Close acReport, RptName
    
        GetReportCaption = RptCaptions(RptName)
    End Function