В этом руководстве будет рассказано, как использовать функцию VBA MsgBox для отображения окон сообщений для пользователей (включая окно сообщений YesNo). Возможно, вас заинтересует наша статья о InputBoxes.
Функция VBA MsgBox
В VBA легко отобразить простой MsgBox:
1 | MsgBox "Это окно сообщения" |
Однако вы можете сделать гораздо больше, чем просто отобразить окно с простым сообщением ОК. Давайте быстро рассмотрим сложный пример, прежде чем углубляться в детали …
VBA Да Нет Окно сообщения
Ниже мы создадим окно сообщения с:
- Заголовок «Заголовок окна сообщения» и подсказка «Текст».
- Значок вопросительного знака
- Варианты Да / Нет вместо простого «ОК»
- Кнопка по умолчанию = «Нет»
123 | Тусклый ответ как целое числоanswer = MsgBox ("Текст", vbQuestion + vbYesNo + vbDefaultButton2, "Заголовок окна сообщения") |
Окно сообщения вернет vbYes или vbNo в зависимости от выбора пользователя. Затем вы можете выполнять различные действия в зависимости от выбора:
12345 | Если answer = vb Да ТогдаMsgBox "Да"ЕщеMsgBox "Нет"Конец, если |
В следующем разделе мы покажем вам все параметры, доступные вам при создании окон сообщений. Затем мы познакомим вас с синтаксисом функции MsgBox и, наконец, рассмотрим другие примеры окон сообщений.
Параметры окна сообщения VBA
Взгляните на изображение ниже. Здесь вы увидите (почти) все параметры, доступные вам при создании окон сообщений. Обратите внимание на значки и различные кнопки.
Это снимок экрана «MessageBox Builder» из нашей надстройки Premium VBA: AutoMacro. MessageBox Builder позволяет быстро создать желаемое окно сообщений и вставить код в модуль кода. Он также содержит множество других построителей кода, обширную библиотеку кода VBA и набор инструментов кодирования. Это необходимо для любого разработчика VBA.
Синтаксис функции MsgBox
MsgBox (приглашение [, кнопки] [, заголовок] [, файл справки, контекст])
подсказка (обязательно) - Это основной текст окна сообщения.
кнопки - Выберите, какие кнопки отображать. Если опущено, «только ОК». Здесь вы также можете указать, какой значок отображать и кнопку по умолчанию.
заглавие - Заголовок вверху окна сообщения. Если не указано, отображается имя текущего приложения (например, Microsoft Excel).
файл помощи - Укажите файл справки, к которому можно получить доступ, когда пользователь нажимает кнопку «Справка». Если указано, то вы также должны добавить контекст (ниже)
контекст - Числовое выражение, представляющее номер контекста справки, присвоенный соответствующему разделу справки.
Вероятно, вы можете проигнорировать аргументы файла справки и контекста. Я никогда не видел, чтобы их использовали.
Настроить заголовок окна сообщения и подсказку
Функция MsgBox позволяет вам настроить заголовок и подсказки следующим образом:
1 | Msgbox "Подсказка" ,, "Заголовок" |
Другой пример:
123 | Sub MsgBoxPromptTitle ()MsgBox «Шаг 1 завершен. Нажмите OK, чтобы запустить шаг 2.» ,, «Шаг 1 из 5»Конец подписки |
Важный! Вы должны не забыть окружить свой текст цитатами.
MessageBox LineBreaks
Вы также можете добавить разрывы строк в приглашения окна сообщения с помощью «vbNewLine».
123 | Sub MsgBoxPromptTitle_NewLine ()MsgBox «Шаг 1 завершен». & vbNewLine & "Нажмите OK, чтобы запустить шаг 2", "Шаг 1 из 5"Конец подписки |
Обратите внимание, что мы используем символ & для объединения текста. Вы можете узнать больше об использовании & с текстом и других опциях для вставки разрывов строк в нашей статье о соединении текста.
Значки MsgBox
VBA дает вам возможность добавить один из четырех предварительно созданных значков в ваши окна сообщений:
Значок Постоянный | Значок |
---|---|
vbInformation | ![]() |
vbCritical | ![]() |
vbQuestion | ![]() |
vbExclamation | ![]() |
Константа Icon должна быть помещена в аргумент кнопки:
123 | Sub MsgBoxQuestionIcon ()MsgBox "Пример вопроса", vbQuestionКонец подписки |
По умолчанию будет создано окно сообщения «ОК» со значком вопроса:
Обратите внимание, как при вводе текста редактор VBA показывает доступные вам параметры:
Это полезно, потому что вам не нужно запоминать точный синтаксис или названия значков или кнопок.
Теперь мы продемонстрируем каждый значок окна сообщения:
Значки MsgBox - информация
123 | Sub MsgBoxInformationIcon ()MsgBox "Пример информации", vbInformationКонец подписки |
Значки MsgBox - критические
123 | Sub MsgBoxCriticalIcon ()MsgBox «Критический пример», vbCriticalКонец подписки |
Значки MsgBox - вопрос
123 | Sub MsgBoxQuestionIcon ()MsgBox "Пример вопроса", vbQuestionКонец подписки |
Значки MsgBox - восклицательный знак
123 | Sub MsgBoxExclamationIcon ()MsgBox «Пример восклицательного знака», vbExclamationКонец подписки |
Ниже мы поговорим о создании окон сообщений с различным расположением кнопок. Если вы все же выберете другой тип окна сообщения, вам нужно будет добавить тип значка после кнопок с помощью знака «+»:
123 | Sub MsgBoxQuestionIcon ()MsgBox «Продолжить?», VbOKCancel + vbQuestionКонец подписки |
Переменные MsgBox
До сих пор мы работали в основном с окном сообщения «ОК» по умолчанию. В окне сообщения «ОК» есть только одна опция: нажатие «ОК» позволяет продолжить ввод кода. Однако вы также можете указать другие группы кнопок: ОК / Отмена, Да / Нет и т. Д.
В этом случае вам нужно будет выполнять разные действия в зависимости от того, какая кнопка нажата. Давайте посмотрим на пример.
Вот окно сообщения, которое мы сгенерируем:
Это весь код (далее мы его разберем):
123456789101112 | Sub MsgBoxVariable ()Тусклый ответ как целое числоanswer = MsgBox («Продолжить?», vbQuestion + vbYesNo)Если answer = vb Да ТогдаMsgBox "Да"ЕщеMsgBox "Нет"Конец, еслиКонец подписки |
Сначала мы назначаем вывод окна сообщений целочисленной переменной.
123 | Тусклый ответ как целое числоanswer = MsgBox («Продолжить?», vbQuestion + vbYesNo) |
Затем мы используем If-Else, чтобы определить, что делать в зависимости от того, какая кнопка нажата:
12345 | Если answer = vb Да ТогдаMsgBox "Да"ЕщеMsgBox "Нет"Конец, если |
Функция MsgBox возвращает целочисленное значение (от 1 до 7), поэтому мы определяем переменную как целочисленный тип. Однако вместо ссылки на целое число вы можете ссылаться на константу (например, vbOK, vbCancel и т. Д.). Посмотрите на эту таблицу, чтобы увидеть все варианты:
Кнопка | Постоянный | Ценить |
---|---|---|
Ok | vbOK | 1 |
Отмена | vbCancel | 2 |
Прервать | vbAbort | 3 |
Повторить | vbRetry | 4 |
Игнорировать | vbIgnore | 5 |
да | vbДа | 6 |
Нет | vb Нет | 7 |
Теперь мы продемонстрируем каждую группу кнопок:
Окно сообщения ОК - vbOKOnly
Это стандартное окно сообщений VBA.
123456 | Sub MsgBox_OKOnly ()Тусклый ответ как целое числоanswer = MsgBox ("Пример OKOnly", vbOKOnly)Конец подписки |
ОК Отменить окно сообщения - vbOKCancel
123456789101112 | Sub MsgBox_OKCancel ()Тусклый ответ как целое числоanswer = MsgBox ("ОК, пример отмены", vbOKCancel)Если answer = vbOK ТогдаMsgBox "ОК"ЕщеMsgBox "Отмена"Конец, еслиКонец подписки |
Да Нет Окно сообщения - vb Да Нет
123456789101112 | Sub MsgBox_YesNo ()Тусклый ответ как целое числоanswer = MsgBox ("Да Нет, пример"; vbYesNo)Если answer = vb Да ТогдаMsgBox "Да"ЕщеMsgBox "Нет"Конец, еслиКонец подписки |
Да Нет Отменить окно сообщения - vb Да Нет Отменить
1234567891011121314 | Sub MsgBox_YesNoCancel ()Тусклый ответ как целое числоanswer = MsgBox ("Да Нет Пример отмены", vbYesNoCancel)Если answer = vb Да ТогдаMsgBox "Да"ElseIf answer = vbNo ТогдаMsgBox "Нет"ЕщеMsgBox "Отмена"Конец, еслиКонец подписки |
Окно сообщения "Прервать повторную попытку" игнорировать - vbAbortRetryIgnore
1234567891011121314 | Sub MsgBox_AbortRetryIgnore ()Тусклый ответ как целое числоanswer = MsgBox ("Пример игнорирования отмены повторной попытки", vbAbortRetryIgnore)Если answer = vbAbort ТогдаMsgBox «Прервать»ElseIf answer = vbRetry ТогдаMsgBox "Повторить попытку"ЕщеMsgBox "Игнорировать"Конец, еслиКонец подписки |
Окно сообщения об отмене повторной попытки - vbRetryCancel
123456789101112 | Sub MsgBox_RetryCancel ()Тусклый ответ как целое числоanswer = MsgBox ("Пример отмены повторной попытки", vbRetryCancel)Если answer = vbRetry ТогдаMsgBox "Повторить попытку"ЕщеMsgBox "Отмена"Конец, еслиКонец подписки |
Примеры сообщений VBA
Подтверждение окна сообщения перед запуском макроса
Этот код отобразит окно сообщения Да Нет перед вызовом макроса. При нажатии кнопки «Да» вызывается макрос, при нажатии «Нет» макрос не запускается.
12345678 | Sub Msgbox_BeforeRunning ()Тусклый ответ как целое числоanswer = MsgBox («Вы хотите запустить Macro1?», vbQuestion + vbYesNo)Если answer = vbYes, тогда вызовите Macro1Конец подписки |
Окно сообщения Да / Нет - Выход из подписки
Здесь мы подтвердим пользователю, следует ли продолжать выполнение макроса. Если щелкнуть Нет, код выйдет из подпрограммы, в противном случае процедура будет продолжена.
12345678910 | Sub Msgbox_BeforeRunning ()Тусклый ответ как целое числоanswer = MsgBox («Вы хотите продолжить?», vbQuestion + vbYesNo)Если answer = vbNo, то выйдите из подписки'Некоторый кодКонец подписки |
Окно сообщения VBA в Access VBA
Все приведенные выше примеры работают в Access VBA точно так же, как и в Excel VBA.