#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 ) не имеют объектов класса.
У вас есть несколько вариантов.
- Вы можете создать локальную таблицу с полем RptName и RptCaption и запросить ее. Конечно, тогда вам нужно как-то обновлять его.
-
Вы могли бы написать функцию, которая «запоминает» результаты, так что вам нужно открывать данный отчет только один раз при каждом запуске программы. Например: .
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