Иногда возникает необходимость предотвратить закрытие пользовательского диалогового окна, чтобы пользователи могли закрывать его только через специально предназначенную кнопку. В этой статье мы рассмотрим, как это сделать с помощью обработчика события QueryClose в VBA.
Что такое QueryClose?
QueryClose — это событие, которое возникает перед закрытием формы. Оно позволяет проверить причину закрытия и, при необходимости, отменить это закрытие.
Создадим форму, которую я назвал: «frm_ОтменитьЗакрытие», а Caption – «событие QueryClose»:
Обработка события QueryClose
Код, расположенный в модуле формы UserForm, выполняется перед закрытием формы:
Как предотвратить останов макроса пользователем
Пользователь может нажать комбинацию клавиш <Ctrl+Break> для остановки макроса, что приведет к закрытию формы. Чтобы этого избежать, перед отображением формы нужно отключить эту возможность:
Важно! Убедитесь, что в вашем коде нет ошибок, иначе можно получить бесконечный цикл.
Вызов формы
Для вызова формы в обычном модуле используйте следующий код:
📌 Скачать файл пример, можно в конце статьи.
На макрос назначена кнопка:
При нажатии на кнопку «х» выходит сообщение:
Теперь пользователь вашей программы сможет закрыть форму только через специально предназначенную кнопку, а попытки закрыть форму другим способом, будут заблокированы с помощью обработчика события QueryClose.
Ведь иногда нужно, чтобы была выполнения какая-то программа в обязательном случае, поэтому вынуждаем пользователя нажать кнопку "Ок".