В статье «Примеры макросов в 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(«Текст содержащий вопрос», vbYesNo, «Название сообщения») = vbYes Then End Sub | 
В условии IF мы сравниваем результат возвращенный функцией MsgBox, с константой vbYes т.е. если в сообщении нажата кнопка «Да», тогда функция MsgBox возвращает значение vbYes (6). Полный перечень констант и их цифровых эквивалентов ниже. Теперь попробуйте на Листе 1 кликнуть два раза по любой ячейке.
Примечание: При вызове сообщения выполнение программы останавливается до тех пор, пока не будет получен ответ от пользователя.
Второй вариант вызова диалога с помощью Select Case.
Создадим вторую процедуру на Листе 2. Код процедуры следующий:
| Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Select Case mes End Sub | 
В этом случае результат вызова MsgBox присваивается переменной mes и далее в Select Case ищется совпадение и согласно совпадения, выполняются действия.
Вот и все. Ниже прикреплен готовый пример, рассмотренный в этой статье.
Перечень констант и значений, возвращаемых функцией MsgBox:
| Константа | Значение | Кнопка | 
| vbOK | 1 | OK | 
| vbCancel | 2 | Отмена | 
| vbAbort | 3 | Прервать | 
| vbRetry | 4 | Повтор | 
| vbIgnore | 5 | Пропустить | 
| vbYes | 6 | Да | 
| vbNo | 7 | Нет | 
Прикрепленный файл: msgbox.zip
pnbsp;сообщения
 
				
				

