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

Примеры работы с диалоговыми сообщениями (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:

📎📎📎📎📎📎📎📎📎📎