Создание диалогового окна в VBA Excel методом Popup объекта WScript.Shell. Ключевые особенности Popup. Время ожидания и возвращаемые значения.
При автоматизации процессов в Excel часто требуется вывести пользователю информационное сообщение, предупреждение или запросить подтверждение действия. Помимо стандартной функции MsgBox, в VBA Excel доступен альтернативный и более гибкий инструмент — метод Popup объекта WScript.Shell.
Что такое объект WScript.Shell
WScript.Shell — это COM-объект Windows Script Host, предназначенный для взаимодействия со средой Windows. С его помощью можно:
- запускать внешние программы;
- работать с системными переменными;
- обращаться к реестру Windows;
- выводить диалоговые окна с помощью метода
Popup.
Для использования объекта в VBA не требуется подключение дополнительных библиотек — он создаётся динамически.
Метод Popup: назначение и возможности
Метод Popup позволяет выводить диалоговое окно с сообщением и кнопками, аналогичное MsgBox, но с дополнительной возможностью задать тайм-аут (автоматическое закрытие окна через определенное время).
Синтаксис метода Popup
|
1 |
WScript.Shell.Popup(Text, SecondsToWait, Title, Type) |
Параметры
- Text — текст сообщения.
- SecondsToWait — время ожидания в секундах. Если
0, окно будет ждать ответа пользователя. - Title — заголовок окна.
- Type — числовое значение, определяющее кнопки и иконку.
Значения параметра Type
Чтобы задать в параметре Type кнопки с иконкой, просто укажите сумму их значений (3 + 32) или сумму констант (vbYesNoCancel + vbQuestion).
Кнопки
| Константа | Описание | Значение |
|---|---|---|
| vbOkOnly | Только кнопка OK | 0 |
| vbOkCancel | Кнопки OK и Cancel (Отмена) | 1 |
| vbAbortRetryIgnore | Кнопки Abort (Прервать), Retry (Повтор) и Ignore (Пропустить) | 2 |
| vbYesNoCancel | Кнопки Yes (Да), No (Нет) и Cancel (Отмена) | 3 |
| vbYesNo | Кнопки Yes (Да) и No (Нет) | 4 |
| vbRetryCancel | Кнопки Retry (Повторить) и Cancel (Отмена) | 5 |
Иконки
| Константа | Описание | Значение |
|---|---|---|
| vbCritical | Значок Critical — сообщение об ошибке | 16 |
| vbQuestion | Значок Question — сообщение с вопросом | 32 |
| vbExclamation | Значок Exclamation — предупреждающее сообщение | 48 |
| vbInformation | Значок Information — информационное сообщение | 64 |
Результаты нажатия кнопок
| Кнопка | Описание | Возвращаемое значение |
|---|---|---|
| Ничего не нажато | в течение timeout | -1 |
| vbOk | OK | 1 |
| vbCancel | Отмена | 2 |
| vbAbort | Прервать | 3 |
| vbRetry | Повтор | 4 |
| vblgnore | Пропустить | 5 |
| vbYes | Да | 6 |
| vbNo | Нет | 7 |
Базовый пример использования Popup в VBA Excel
|
1 2 3 4 5 6 7 8 |
Sub ShowPopup() Dim sh As Object Set sh = CreateObject("WScript.Shell") sh.Popup "Операция выполнена успешно", 0, "Сообщение", 64 Set sh = Nothing End Sub |
В данном примере:
0— окно будет отображаться до нажатия кнопки пользователем.64— иконка информационного сообщения;
Использование Popup с тайм-аутом
Одно из главных преимуществ Popup — автоматическое закрытие окна.
|
1 2 3 4 5 6 7 8 |
Sub PopupWithTimeout() Dim sh As Object Set sh = CreateObject("WScript.Shell") sh.Popup "Окно закроется через 5 секунд", 5, "Уведомление", vbExclamation Set sh = Nothing End Sub |
Если пользователь не нажмёт кнопку, окно закроется самостоятельно по истечении указанного времени. Тесты показали, что при установленных 5 секундах, окно Popup может закрыться через 20, 7, 15, 13 секунд. Главное — закрывается.
Получение результата нажатия кнопки
Метод Popup возвращает числовой код, соответствующий выбранной кнопке.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub PopupWithResult() Dim sh As Object Dim result As Integer Set sh = CreateObject("WScript.Shell") result = sh.Popup("Какое действие следует предпринять?", 5, "Требуется ваше решение", vbAbortRetryIgnore + vbQuestion) Select Case result Case -1 MsgBox "Окно закрылось само " & "(Код: " & result & ")" Case 3 MsgBox "Вы нажали кнопку Прервать " & "(Код: " & result & ")" Case 4 MsgBox "Вы нажали кнопку Повтор " & "(Код: " & result & ")" Case 5 MsgBox "Вы нажали кнопку Пропустить " & "(Код: " & result & ")" Case Else MsgBox "Этого не может быть " & "(Код: " & result & ")" End Select Set sh = Nothing End Sub |
Когда использовать Popup вместо MsgBox
Метод WScript.Shell.Popup — тоже вполне рабочий инструмент для создания диалоговых окон в VBA Excel. Он расширяет стандартные возможности MsgBox, позволяя задавать тайм-аут — автоматическое закрытие окна через заданный промежуток времени.
В остальном Popup и MsgBox очень похожи:
- кнопки и иконки задаются одними и теми же константами;
- нажатия одинаковых кнопок возвращают одинаковые значения.
Используйте WScript.Shell.Popup, если требуется автоматическое закрытие сообщения. Для простых диалогов внутри Excel проще использовать MsgBox.
Познакомьтесь с другими диалоговыми окнами, используемыми в VBA Excel.