Иногда разработчики не закрывают форму, а просто скрывают ее для того, чтобы в любой момент времени она могла снова мгновенно (без задержек) отобразиться на экране. Программа, в которой формы отображаются мгновенно и выглядит для пользователя предпочтительнее.
Желательно отключать прорисовку экрана, для того чтобы устранить хоть небольшое, но все же нежелательное мерцание. Только проследите, чтобы прорисовка экрана включалась, даже если в процедуре произошла ошибка (в перехватчике).
Если форма не открыта (не загружена), а мы пытаемся ее показать, возникнет ошибка, поэтому желательно пользоваться проверкой (If IsLoaded("Форма2") Then ...):
' Процедура вызывается из модуля формы Форма1
Private Sub Кнопка4_Click()
' отключаем прорисовку экрана
DoCmd.Echo False
' выделяем форму Форма2 и скрываем ее
DoCmd.SelectObject acForm, "Форма2"
DoCmd.RunCommand acCmdWindowHide
' можно и просто RunCommand acCmdWindowHide
' включаем прорисовку экрана
DoCmd.Echo True
End Sub
' покажем скрытую форму Форма2
Private Sub Кнопка5_Click()
' отключаем прорисовку экрана
DoCmd.Echo False
' показываем скрытую Форма2
DoCmd.SelectObject acForm, "Форма2"
' вернем фокус на форму Форма1, т.е. обратно
Me.SetFocus
' включаем прорисовку экрана
DoCmd.Echo True
End Sub
Список скрытых форм также можно отобразить, выбрав команду Окно -> Отобразить.
впрочем, никаких ограничений нет, можно скрывать и текущую форму, т.е. саму себя:
' Процедура вызывается из модуля формы Форма1
Private Sub Кнопка4_Click()
' отключаем прорисовку экрана
DoCmd.Echo False
' просто выполняем код - текущая форма скроется прямо из под мышки ;)
DoCmd.RunCommand acCmdWindowHide
' включаем прорисовку экрана
DoCmd.Echo True
End Sub
конечно, неплохо было бы еще и первоначально открывать форму в скрытом режиме
Private Sub Form_Open(Cancel As Integer)
' при открытии основной формы сразу в скрытом режиме открываем вспомогательную форму Форма1
DoCmd.OpenForm ("Форма1"), , , , , acHidden
End Sub
Ссылки по теме