Я использую VBA для динамической загрузки содержимого отчета, и в зависимости от того, какой отчет выбран из формы панели управления, которую я создал, запрос отчета может быть отфильтрован.
В началеиз моей функции Report_Open, у меня есть это:
Private Sub Report_Open(Cancel As Integer)
Me.Filter = "VIP=True"
Me.FilterOnLoad = True
Теперь, это работало, когда я начал этот проект - я закомментировал эти строки, и когда раскомментировал их, обнаружил, что это больше не работает должным образом.Вместо того, чтобы применять фильтр при загрузке отчета, мне нужно перезагрузить отчет, чтобы фильтр работал - либо переключившись на предварительный просмотр печати и вернувшись к представлению отчета, либо переключившись в представление конструктора, а затем обратно в представление отчета (в режиме конструктора выбранный фильтр отображается на панели свойств).
Я загружаю отчет с помощью командных кнопок, которые позволяют пользователю просматривать, экспортировать в PDF или печатать (открывается в режиме предварительного просмотра).Ни одна из этих команд не приводит к открытию отчета с примененным фильтром - его необходимо перезагрузить.
Ниже приведены команды, которые я использую для загрузки отчета:
If (Action = "View") Then
DoCmd.OpenReport "Test", acViewReport
ElseIf (Action = "PDF") Then
DoCmd.OutputTo acOutputReport, "Test", acFormatPDF
ElseIf (Action = "Print") Then
DoCmd.OpenReport "Test", acViewPreview
End If
Хорошо, я понятия не имею, почему Me.Filter
и Me.FilterOnLoad
не работают , поскольку из всего, что я видел на MSDN и в других местах, оно должно работать.При этом я понял, что вместо этого могу использовать DoCmd.ApplyFilter
:
'Check if VIP - add filter if necessary
If (getGlobal(1) = True) Then
DoCmd.ApplyFilter , "VIP = True"
End If
Я все еще хотел бы знать, почему другой способ ведет себя так странно, если у кого-то есть какие-то идеи ...