В Access 2007 у меня есть форма, позволяющая просматривать и экспортировать параметры отчетов проекта.DoCmd.OutputTo On Report Not Unload
DoCmd.OutputTo, похоже, странно ведет себя при работе с отчетами, для которых свойство Modal установлено в true. В настоящее время модальное значение установлено в True в событии Open для всех отчетов, с которыми я работаю.
Если я
DoCmd.OpenReport szReportName, acViewPreview
DoCmd.Close acReport, szReportName
Затем фокус и управление возвращается в исполняющем форме нормально.
Если экспортировать непосредственно, а и использовать
DoCmd.OutputTo acOutputReport, szReportName
Затем отчет правильно экспортируется, но контроль никогда не возвращается к исполняющему форме. Он полностью отключен. Тот же код работает очень хорошо, если я использую Modal = False при открытии отчета. Я немного экспериментировал с крючками событий отчета, чтобы попытаться выяснить, в чем разница, и OnUnload
никогда не попадает после вызова OutputTo
.
Я знаю, что я мог бы обойти это только делает модальный отчет, когда мне это нужно, чтобы быть модальными, но это, безусловно, проще всего сделать из внутри кода отчета вместо модуля его открытия, и я на самом деле не думайте, что у меня должна быть эта проблема. У меня также нет никаких проблем экспортирующей отчет из режима предварительного просмотра, а не непосредственно из VBA, но, видимо, клиент делает ...
Таким образом, фактические вопросы:
- Есть ли хорошая причина для OutputTo не триггер событие Unload? Если это нормальное поведение, то прекрасно, но я бы хотя бы хотел понять причину этого.
- Есть ли способ экспортировать модальный отчет и все еще восстановить контроль над другими окнами? Или, по крайней мере, не-хакерский способ повторного включения и уделения внимания вызывающей форме?
Я согласен с тем, что установка модального (или любого) свойства в коде отчета менее желательна. Честно говоря, я не сказал, что я просто пытаюсь сохранить прежнее поведение. Я считаю, что Modal использовался вместо acDialog, потому что мы не хотели, чтобы отчет находился в режиме PopUp. Несмотря на это, я сопротивлялся acDialog, потому что он ведет себя иначе, чем свойство Modal - он все же позволяет мне переключать фокус на вызывающую форму. Я забыл, что это действительно должно быть одно и то же, поэтому мне кажется, что я должен искать что-то еще не так с отчетом, который вызывает acDialog, чтобы он не вел себя модально. – Jelly
Popup и Modal - это две совершенно разные пропозиции, и открытие формы или отчета с помощью acDialog НЕ приводит к тому, что форма/отчет находятся в режиме Popup. В принципе, насколько я могу судить, acDialog вызывает игнорирование свойств Modal и Popup. –
Я только что протестировал отчет, открытый с помощью командной кнопки с помощью acDialog, и неважно, какие были установлены свойства Modal/Popup, я не мог настроить фокус на форму вызова до тех пор, пока превью отчета не будет закрыт. –