Вы здесь
Примеры работы с диалоговыми сообщениями (msgbox) в VBA

В статье "Примеры макросов в Excel. Диалоговое VBA сообщение msgBox" мы вкратце познакомились с диалоговым сообщением msgbox. Но это было простейшее информационное сообщение. Теперь рассмотрим подробнее работу с функцией MsgBox и все виды диалоговых сообщений.
Синтаксис функции MsgBox
Функция MsgBox имеет следующий синтаксис:
MsgBox ( сообщение [, константы сообщения] [, заголовок] [, файл справки hlp, контекст справки])
Обязательным параметром является «Сообщение», остальные могут быть опущены.
MsgBox “Текст сообщения”
- Константы сообщения - позволяют определить вид диалогов.
- Заголовок – задает заголовок формы диалога.
- Файл справки hlp - строковое выражение, указывающее имя файла справки для диалогового окна.
- Контекст справки - числовое выражение, указывающее номер контекста файла справки для диалогового окна.
Диалоговое окно вида:
создается следующей командой:
MsgBox "Текст содержащий вопрос", vbYesNo, "Название сообщения"
Для создания сообщения такого вида:
команда будет выглядеть так:
MsgBox "Текст содержащий вопрос", vbYesNoCancel, "Название сообщения"
Сообщение такого вида:
создается командой:
MsgBox "Текст содержащий вопрос", vbAbortRetryIgnore, "Название сообщения"
т.е. из всех трех примеров в команде меняется только второй параметр (vbYesNo, vbYesNoCancel, vbAbortRetryIgnore). Это и есть значения (константы) определяющие вид сообщения. Параметры (vbYesNo, vbYesNoCancel) могут быть заменены на числовое значение, например диалог vbYesNo можно вызвать, указав 4: MsgBox "Текст содержащий вопрос", 4, "Название сообщения".
Ниже приведен полный список констант и эквивалентных им цифровых значений:
Константа | Значение | Описание |
vbOKOnly | 0 | Выводит сообщение с кнопкой OK |
vbOKCancel | 1 | Выводит сообщение с кнопками OK и Отмена |
vbAbortRetryIgnore | 2 | Выводит сообщение с кнопками Прервать, Повтор, Пропустить |
vbYesNoCancel | 3 | Выводит сообщение с кнопками Да, Нет, Отмена. |
vbYesNo | 4 | Выводит сообщение с кнопками Да и Нет |
vbRetryCancel | 5 | Выводит сообщение с кнопками Повтор и Отмена |
В сообщениях можно слегка изменить внешний вид, назначить кнопку по умолчанию, добавить кнопку "Справка" путем сложения констант.
Например: MsgBox "Текст содержащий вопрос", vbYesNoCancel+vbInformation+vbMsgBoxHelpButton+vbDefaultButton2, "Название сообщения" построит сообщение вида:
vbInformation - добавляет иконку восклицания в сообщение
vbMsgBoxHelpButton - добавляет кнопку "Справка"
vbDefaultButton2 - устанавливает фокус на второй кнопке ("Нет")
Ниже таблица со списком констант иконок и констант, устанавливающих фокус на кнопках:
Константа | Значение | Описание |
vbCritical | 16 | Выводит иконку критического сообщения (красный овал с крестом) |
vbQuestion | 32 | Выводит иконку с вопросительным знаком |
vbExclamation | 48 | Выводит иконку с восклицательным знаком (в желтом треугольнике) |
vbInformation | 64 | Выводит иконку информационного сообщения |
vbDefaultButton1 | 0 | Устанавливает фокус по умолчанию на первой кнопке |
vbDefaultButton2 | 256 | Устанавливает фокус по умолчанию на второй кнопке |
vbDefaultButton3 | 512 | Устанавливает фокус по умолчанию на третьей кнопке |
vbDefaultButton4 | 768 | Устанавливает фокус по умолчанию на четвертой кнопке |
vbMsgBoxHelpButton | 16384 | Добавляет кнопку Справка |
vbMsgBoxRight | 524288 | Выравнивание текста сообщения по правой стороне |
vbMsgBoxRtlReading | 1048576 | Зеркально переворачивает все элементы в сообщении (см. снимок ниже) |
Как узнать какую кнопку в сообщении нажал пользователь?
Определяться выбор пользователя будет с помощью условия IF. В некоторых ситуациях можно использовать Select Case.
Например, вызовем сообщение двойным нажатием ЛКМ по любой ячейке на листе. В соответствии с выбором пользователя, выведем в эту ячейку текст.
Создаем новую книгу Excel и переходим в режим Visual Basic (Alt+F11). В окне проекта выбираем «Лист1» и кликаем по нему два раза ЛКМ.
В открывшемся окне редактора кода вводим следующую процедуру:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) |
В условии IF мы сравниваем результат возвращенный функцией MsgBox, с константой vbYes т.е. если в сообщении нажата кнопка «Да», тогда функция MsgBox возвращает значение vbYes (6). Полный перечень констант и их цифровых эквивалентов ниже. Теперь попробуйте на Листе 1 кликнуть два раза по любой ячейке.
Примечание: При вызове сообщения выполнение программы останавливается до тех пор, пока не будет получен ответ от пользователя.
Второй вариант вызова диалога с помощью Select Case.
Создадим вторую процедуру на Листе 2. Код процедуры следующий:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) |
В этом случае результат вызова MsgBox присваивается переменной mes и далее в Select Case ищется совпадение и согласно совпадения, выполняются действия.
Вот и все. Ниже прикреплен готовый пример, рассмотренный в этой статье.
Перечень констант и значений, возвращаемых функцией MsgBox:
Константа | Значение | Кнопка |
vbOK | 1 | OK |
vbCancel | 2 | Отмена |
vbAbort | 3 | Прервать |
vbRetry | 4 | Повтор |
vbIgnore | 5 | Пропустить |
vbYes | 6 | Да |
vbNo | 7 | Нет |
Прикрепленный файл: msgbox.zip
pnbsp;сообщения
- Добавить комментарий
- 129525 просмотров
Комментарии
Спасибо, все четко, да ясно расписано
Большое спасибо! Доступно и полно расписано
А такой вопрос
если нажать крестик то выйдет сообщение с надписью нажата отмена
можно ли как то разделить кодом нажатие на отмену и на крестик(закрытие программы)?
Добавить комментарий