Найти в Дзене
VBA Excel с нуля

VBA Excel № 178. Немодальные диалоговые окна

Немодальные диалоговые окна Диалоговые окна можно разделить на два типа: модальные и немодальные. Модальные диалоговые окна блокируют возможность взаимодействия с основным приложением до тех пор, пока пользователь не закроет окно. Это привычное поведение для большинства пользователей, так как такие окна заставляют завершить текущее действие прежде, чем продолжить работу с приложением. Однако немодальные диалоговые окна функционируют иначе — они не блокируют приложение и позволяют пользователю продолжать работу, даже если окно остается открытым. Это значительно удобнее в тех случаях, когда нужно получать дополнительную информацию или настройки без остановки основного процесса работы. Файл пример и видео к нему был опубликован четыре дня назад (29.09.2024). Многие читатели моего канала уже скачали, посмотрели, ознакомились. Спасибо всем, кто интересуется темой. Пример использования немодальных диалоговых окон Чтобы отобразить немодальное окно в приложении с помощью UserForm, воспользуйт
Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Немодальные диалоговые окна

Диалоговые окна можно разделить на два типа: модальные и немодальные. Модальные диалоговые окна блокируют возможность взаимодействия с основным приложением до тех пор, пока пользователь не закроет окно. Это привычное поведение для большинства пользователей, так как такие окна заставляют завершить текущее действие прежде, чем продолжить работу с приложением. Однако немодальные диалоговые окна функционируют иначе — они не блокируют приложение и позволяют пользователю продолжать работу, даже если окно остается открытым. Это значительно удобнее в тех случаях, когда нужно получать дополнительную информацию или настройки без остановки основного процесса работы.

Файл пример и видео к нему был опубликован четыре дня назад (29.09.2024). Многие читатели моего канала уже скачали, посмотрели, ознакомились. Спасибо всем, кто интересуется темой.

Пример использования немодальных диалоговых окон

Чтобы отобразить немодальное окно в приложении с помощью UserForm, воспользуйтесь следующей инструкцией:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

На скриншоте ниже показано немодальное диалоговое окно, которое выводит информацию об активной ячейке в Microsoft Excel. Пока окно отображается, пользователь может продолжать работать с таблицей, перемещаться по листам или выполнять другие действия.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

📌 Скачать файл пример, можно в конце статьи.

Обновление содержимого немодального окна

Одним из немаловажных моментов при работе с немодальными диалоговыми окнами является своевременное обновление их содержимого. В нашем примере для этого используются два события рабочего листа: SheetSelectionChange и SheetActivate. Эти события отслеживают изменение выбора активных ячеек и активность листа. Соответствующие обработчики событий находятся в модуле кода объекта ThisWorkbook (в данном случае, рабочей книги).

Пример кода обработчиков:

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Эти обработчики вызывают процедуру UpdateBox (также расположена в обычном модуле), которая обновляет содержимое окна.

Процедура обновления содержимого окна

Ниже приведен код процедуры UpdateBox, которая отвечает за обновление информации в диалоговом окне на основе текущей активной ячейки.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

В этой процедуре мы проверяем, является ли активный лист рабочим листом (Worksheet). Если это не так, элементы управления окна UserForm получают значение "Н/Д" (нет данных). В противном случае информация о выделенной ячейке, такая как адрес, формула, числовой формат и статус блокировки, обновляется автоматически.

Отображение немодального окна

Следующие процедуры отвечают за отображение окна с информацией о ячейке.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Процедура ShowCellInfoBox проверяет версию Excel, чтобы избежать ошибок в старых версиях (например, Excel 97). Если версия программы удовлетворяет требованиям, вызывается процедура ShowModelessForm, которая отображает окно UserForm в немодальном режиме.

Коротко о том, как работает код

1. Окно UserForm отображается в немодальном режиме, что позволяет пользователю продолжать работу с таблицами, пока окно остается открытым.

2. Проверяется, является ли активный лист рабочим листом. Если это не так, информация в окне помечается как "Н/Д" (нет данных).

3. Событие SelectionChange отслеживает изменение активной ячейки, обновляя окно при каждом изменении выделенной ячейки.

4. Окно выводит информацию через элементы управления Label.

Короткое видео о работе программы:

СКАЧАТЬ ФАЙЛ ПРИМЕР