Примеры работы с диалоговыми сообщениями (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
Выводит сообщение с кнопкой OK
vbOKCancel
Выводит сообщение с кнопками OK и Отмена
vbAbortRetryIgnore
Выводит сообщение с кнопками Прервать, Повтор, Пропустить
vbYesNoCancel
Выводит сообщение с кнопками Да, Нет, Отмена.
vbYesNo
Выводит сообщение с кнопками Да и Нет
vbRetryCancel
Выводит сообщение с кнопками Повтор и Отмена
В сообщениях можно слегка изменить внешний вид, назначить кнопку по умолчанию, добавить кнопку "Справка" путем сложения констант.
Например: MsgBox "Текст содержащий вопрос", vbYesNoCancel+vbInformation+vbMsgBoxHelpButton+vbDefaultButton2, "Название сообщения" построит сообщение вида:
vbInformation - добавляет иконку восклицания в сообщениеvbMsgBoxHelpButton - добавляет кнопку "Справка"vbDefaultButton2 - устанавливает фокус на второй кнопке ("Нет")
Ниже таблица со списком констант иконок и констант, устанавливающих фокус на кнопках:
Константа
Значение
Описание
vbCritical
Выводит иконку критического сообщения (красный овал с крестом)
vbQuestion
Выводит иконку с вопросительным знаком
vbExclamation
Выводит иконку с восклицательным знаком (в желтом треугольнике)
vbInformation
Выводит иконку информационного сообщения
vbDefaultButton1
Устанавливает фокус по умолчанию на первой кнопке
vbDefaultButton2
Устанавливает фокус по умолчанию на второй кнопке
vbDefaultButton3
Устанавливает фокус по умолчанию на третьей кнопке
vbDefaultButton4
Устанавливает фокус по умолчанию на четвертой кнопке
vbMsgBoxHelpButton
Добавляет кнопку Справка
vbMsgBoxRight
Выравнивание текста сообщения по правой стороне
vbMsgBoxRtlReading
Зеркально переворачивает все элементы в сообщении (см. снимок ниже)
Как узнать какую кнопку в сообщении нажал пользователь?Определяться выбор пользователя будет с помощью условия IF. В некоторых ситуациях можно использовать Select Case.
Например, вызовем сообщение двойным нажатием ЛКМ по любой ячейке на листе. В соответствии с выбором пользователя, выведем в эту ячейку текст.
Создаем новую книгу Excel и переходим в режим Visual Basic (Alt+F11). В окне проекта выбираем «Лист1» и кликаем по нему два раза ЛКМ.
В открывшемся окне редактора кода вводим следующую процедуру:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If MsgBox("Текст содержащий вопрос", vbYesNo, "Название сообщения") = vbYes Then Selection = "Нажата ДА"Else Selection = "Нажата Нет"End If
End Sub
В условии IF мы сравниваем результат возвращенный функцией MsgBox, с константой vbYes т.е. если в сообщении нажата кнопка «Да», тогда функция MsgBox возвращает значение vbYes (6). Полный перечень констант и их цифровых эквивалентов ниже. Теперь попробуйте на Листе 1 кликнуть два раза по любой ячейке.
Примечание: При вызове сообщения выполнение программы останавливается до тех пор, пока не будет получен ответ от пользователя.
Второй вариант вызова диалога с помощью Select Case.
Создадим вторую процедуру на Листе 2. Код процедуры следующий:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)Dim mesmes = MsgBox("Текст содержащий вопрос", vbYesNoCancel + vbInformation + vbDefaultButton2, "Название сообщения")
Select Case mes Case vbYes: Selection = "Нажата ДА" Case vbNo: Selection = "Нажата НЕТ" Case vbCancel: Selection = "Нажата Отмена"End Select
End Sub
В этом случае результат вызова MsgBox присваивается переменной mes и далее в Select Case ищется совпадение и согласно совпадения, выполняются действия.
Вот и все. Ниже прикреплен готовый пример, рассмотренный в этой статье.
Перечень констант и значений, возвращаемых функцией MsgBox: