Я не согласен с этим подходом, поскольку мне не нравится привязывать отчеты к определенным формам.
Вместо этого я использую диалоговую форму (как здесь), которая открывается в событии OnOpen отчета, изаписывает источник записей отчета.
Если вы хотите, чтобы отчет мог быть запущен без всплывающего диалогового окна, вы можете сделать его условным для OpenArgs, или, скажем, если свойство Filter уже установлено (чтопроисходит, если вы используете DoCmd.OpenReport с аргументом WHERE.
Мне нравится делать отчеты и диалоги максимально независимыми, и часто я буду использовать модуль автономного класса в качестве структуры хранения данных и проверяю егов событии OnOpen.Если общедоступной переменной для соответствующего экземпляра модуля класса является Nothing, просто запустите отчет, в противном случае извлеките данные из свойств экземпляра модуля класса и запишите источник записей.
Таким образом, выможет иметь диалоговую форму и отчет полностью независимыми.Оба должны ничего не знать друг о друге, но оба будут использоваться с модулем класса (хотя форме не нужно ничего знать о экземпляре модуля класса).
Для получения более подробной информации просто спросите.
Это сложная тема, и я потратил годы на ее разработку, чтобы сделать приложения максимально удобными в обслуживании.Разделение объектов пользовательского интерфейса друг от друга - это одна из вещей, которая способствует лучшему повторному использованию и, следовательно, лучшему удобству обслуживания и расширяемости.
(конечно, вам не нужно использовать модули классов - выможет использовать пользовательские типы, массивы или что-то еще, но мне нравится возможность иметь несколько экземпляров одной и той же структуры, что и является целью модуля класса)