Итак, как же правильно закрывать пользовательское диалоговое окно?
Давайте рассмотрим различные способы закрытия формы UserForm и их особенности.
Для начала создадим форму с кнопкой.
Далее в модуле прописываем код с одной строкой для вызова формы:
Использование инструкции Unload
Для закрытия формы UserForm можно использовать инструкцию Unload. Эта инструкция удаляет форму из памяти. Например, используйте следующую инструкцию:
Unload UserForm1 или Unload Me. И то и то, работает.
Нужно понимать, что код написан внутри модуля самой формы (при создании формы я дважды нажал на кнопку CommandButton1, и как бы провалился в модуль формы).
📌 Скачать файл пример, можно в конце статьи.
Ключевое слово Me указывает на текущую форму.
Давайте разберём в каких случаях применяется Unload.
Обычно инструкция Unload выполняется после того, как форма завершила все свои функции. Например, на форме может быть кнопка OK (CommandButton), нажатие на которую запускает макрос. В этом макросе одной из функций может быть закрытие формы:
Форма остается на экране до завершения выполнения макроса. После выгрузки все элементы управления на форме возвращаются в исходное состояние, и доступ к значениям элементов уже невозможен.
Сохранение данных перед выгрузкой
Если нужно сохранить введенные пользователем данные для дальнейшего использования после выгрузки формы, можно сохранить их в переменные с областью действия Public, определенные в стандартном модуле VBA, или в ячейки листа Excel (для начала добавим в форму TextBox1):
Пропишем в модуле формы код:
Или:
Автоматическое закрытие при нажатии на кнопку "Закрыть"
Когда пользователь нажимает на кнопку Закрыть (крестик в заголовке окна), форма автоматически выгружается из памяти. При этом происходят события QueryClose и Terminate, которые можно обработать:
Ловим событие "QueryClose" этим кодом:
И при закрытии формы "крестиком", получаем:
Теперь поймаем событие "Terminate" следующим макросом:
Работа формы завершается и выходит сообщение об этом:
Использование метода Hide
Метод Hide позволяет скрыть форму, но оставить ее в памяти. Это полезно, если нужно продолжить работу с элементами управления на форме:
UserForm1.Hide или Me.Hide
Пример использования метода Hide
Если необходимо немедленно скрыть форму при выполнении макроса, используйте метод Hide в начале процедуры. Затем можно выполнить необходимые действия и выгрузить форму:
В этом примере форма скрывается сразу после нажатия кнопки, а затем выгружается после выполнения цикла (заполняется столбец "А").
Давайте подытожим: знание различных способов закрытия формы UserForm в VBA поможет Вам (как мне кажется), достаточно эффективно управлять памятью и возможно предотвращать ошибки. Инструкции Unload и метод Hide позволяют контролировать видимость и состояние формы, а также сохранять введенные данные для дальнейшего использования.
Как Вы наверно заметили, что коды закомментированы. Их по очереди можно «РАСКОММЕНТИРОВАТЬ», чтобы посмотреть работу каждого, но не забывайте закомментировать предыдущие (чтобы не возникал конфликт). В общем попробуйте побаловаться макросами...