Использование функции MsgBox в VBA Excel, ее синтаксис и параметры. Значения, возвращаемые функцией MsgBox. Примеры использования.
Функция MsgBox предназначена в VBA Excel для вывода сообщения в диалоговом окне, ожидания нажатия кнопки и возврата значения типа Integer, указывающего на то, какая кнопка была нажата. Для упрощения восприятия информации, в этой статье не рассматриваются параметры, связанные с контекстной справкой и модальностью диалогового окна MsgBox.
Синтаксис функции
MsgBox ( Prompt [, Buttons ] [, Title ])
Обязательным параметром функции MsgBox является Prompt, если Buttons и Title явно не указаны, используются их значения по умолчанию. Кроме того, если необязательные параметры не указаны и возвращаемое значение не присваивается переменной, сообщение не заключается в скобки:
Пример 1
Sub Test1() MsgBox «Очень важное сообщение!» End Sub |
Параметры функции
Параметр | Описание | Значение по умолчанию |
---|---|---|
Prompt* | Обязательный параметр. Выражение типа String, отображаемое в диалоговом окне в виде сообщения. Разделить на строки можно с помощью константы vbNewLine. | Нет |
Buttons | Необязательный параметр. Числовое выражение, которое представляет собой сумму значений, задающих номер и тип отображаемых кнопок, стиль используемого значка, тип кнопки по умолчанию. | 0 |
Title | Необязательный параметр. Выражение типа String, отображаемое в заголовке диалогового окна. | Имя приложения** |
*Максимальная длина параметра Prompt составляет примерно 1024 знака и зависит от их ширины.
**В Excel по умолчанию в заголовке MsgBox выводится надпись «Microsoft Excel».
Константы параметра «Buttons»
Тип и количество кнопок
Константа | Описание | Значение |
---|---|---|
vbOKOnly | Отображается только кнопка OK. | 0 |
vbOKCancel | Отображаются кнопки OK и Cancel (Отмена). | 1 |
vbAbortRetryIgnore | Отображаются кнопки Abort (Прервать), Retry (Повторить) и Ignore (Пропустить). | 2 |
vbYesNoCancel | Отображаются кнопки Yes (Да), No (Нет) и Cancel (Отмена). | 3 |
vbYesNo | Отображаются кнопки Yes (Да) и No (Нет). | 4 |
vbRetryCancel | Отображаются кнопки Retry (Повторить) и Cancel (Отмена). | 5 |
Стиль значка
Константа | Описание | Значение |
---|---|---|
vbCritical | Отображается значок Critical — Критичное сообщение, сообщение об ошибке. | 16 |
vbQuestion | Отображается значок Question — Сообщение с вопросом. | 32 |
vbExclamation | Отображается значок Exclamation — Предупреждающее сообщение. | 48 |
vbInformation | Отображается значок Information — Информационное сообщение. | 64 |
Для просмотра отображаемых значков, скопируйте код в свой модуль и запустите на выполнение:
Пример 2
Sub Test2() Dim a As Integer a = MsgBox(«Критичное сообщение, сообщение об ошибке», 16) a = MsgBox(«Сообщение с вопросом», 32) a = MsgBox(«Предупреждающее сообщение», 48) a = MsgBox(«Информационное сообщение», 64) End Sub |
Кнопка по умолчанию
Константа | Описание | Значение |
---|---|---|
vbDefaultButton1 | По умолчанию активна первая кнопка. | 0 |
vbDefaultButton2 | По умолчанию активна вторая кнопка. | 256 |
vbDefaultButton3 | По умолчанию активна третья кнопка. | 512 |
Возвращаемые значения
Константа | Кнопка | Значение |
---|---|---|
vbOK | OK | 1 |
vbCancel | Отмена | 2 |
vbAbort | Прервать | 3 |
vbRetry | Повторить | 4 |
vbIgnore | Пропустить | 5 |
vbYes | Да | 6 |
vbNo | Нет | 7 |
Значение, возвращаемое функцией MsgBox, используется для выбора дальнейших действий исполняемой программы в зависимости от нажатой кнопки.
Для третьего примера зададим следующие параметры первой функции MsgBox:
- Prompt = «Выберите кнопку!»
- Buttons = 323 (3 (vbYesNoCancel) + 64 (vbInformation) + 256 (vbDefaultButton2))
- Title = «Выбор кнопки»
Вторая функция MsgBox используется как простое информационное сообщение с параметрами по умолчанию.
Пример 3
Sub Test3() Dim a As Integer a = MsgBox(«Выберите кнопку!», 323, «Выбор кнопки») If a = 6 Then MsgBox «Вы нажали кнопку: Да» ElseIf a = 7 Then MsgBox «Вы нажали кнопку: Нет» Else MsgBox «Вы нажали кнопку: Отмена» End If End Sub |
В этом примере, в зависимости от нажатой кнопки в первом диалоговом окне, во втором сообщении выводится название нажатой кнопки. Обратите внимание, что вторая кнопка в открывшемся первом окне MsgBox выделена по умолчанию и срабатывает при нажатии клавиши «Enter».
А что будет, если первое диалоговое окно из третьего примера закрыть крестиком? Проверьте сами.
На чтение 10 мин. Просмотров 38.5k.
В Excel VBA вы можете использовать функцию MsgBox для отображения окна сообщения (как показано ниже):
MsgBox — это не что иное, как диалоговое окно, которое вы можете использовать для информирования своих пользователей, показывая пользовательское сообщение или получая некоторые основные входные данные (такие как Да / Нет или OK / Отмена).
Пока отображается диалоговое окно MsgBox, ваш код VBA останавливается. Вам нужно нажать любую из кнопок в MsgBox, чтобы запустить оставшийся код VBA.
Примечание: в этом уроке я буду использовать слова «окно сообщения» и MsgBox взаимозаменяемо. При работе с Excel VBA вам всегда нужно использовать MsgBox.
Содержание
- Анатомия VBA MsgBox в Excel
- Синтаксис функции VBA MsgBox
- Константы кнопки Excel VBA MsgBox (примеры)
- Константы значков Excel VBA MsgBox (примеры)
- Настройка заголовка и приглашения в MsgBox
- Присвоение значения MsgBox переменной
Анатомия VBA MsgBox в Excel
Окно сообщения состоит из следующих частей:
- Title — заголовок: обычно используется для отображения содержания окна сообщения. Если вы ничего не указали, отображается имя приложения, в данном случае Microsoft Excel.
- Prompt — подсказка: это сообщение, которое вы хотите отобразить. Вы можете использовать это пространство, чтобы написать пару строк или даже отобразить таблицы / данные здесь.
- Button(s) — кнопка(-и): хотя кнопка «ОК» является кнопкой по умолчанию, ее можно настроить таким образом, чтобы отображать такие кнопки, как «Да / Нет»; «Да / Нет / Отмена», «Повторить» / «Пропустить» и т.д.
- Close Icon — значок закрытия: Вы можете закрыть окно сообщения, нажав на значок закрытия.
Синтаксис функции VBA MsgBox
Как я уже упоминал, MsgBox является функцией и имеет синтаксис, аналогичный другим функциям VBA.
MsgBox( prompt [, buttons ] [, title ] [, helpfile, context ] )
- prompt — это обязательный аргумент. Он отображает сообщение, которое вы видите в MsgBox. В нашем примере текст «Это образец MsgBox» — это «подсказка». В приглашении можно использовать до 1024 символов, а также использовать его для отображения значений переменных. Если вы хотите показать подсказку, состоящую из нескольких строк, вы можете сделать это также (подробнее об этом позже в этом руководстве).
- [buttons ] — определяет, какие кнопки и значки отображаются в MsgBox. Например, если я использую vbOkOnly, на нем будет отображаться только кнопка OK, а если я использую vbOKCancel, на нем будут отображаться кнопки OK и Отмена. Я расскажу о различных видах кнопок позже в этом уроке.
- [title] — здесь вы можете указать заголовок в диалоговом окне сообщения. Отображается в строке заголовка MsgBox. Если вы ничего не укажете, будет показано название приложения.
- [helpfile] — вы можете указать файл справки, к которому можно получить доступ, когда пользователь нажимает кнопку «Справка». Кнопка справки появится только тогда, когда вы используете для нее код кнопки. Если вы используете файл справки, вам также необходимо указать аргумент context.
- [context] — это числовое выражение, которое является номером контекста справки, назначенным соответствующему разделу справки.
Если вы новичок в концепции Msgbox, не стесняйтесь игнорировать аргументы [helpfile] и [context]. Они редко используются.
Примечание. Все аргументы в квадратных скобках являются необязательными. Только аргумент «подсказка» является обязательным.
Константы кнопки Excel VBA MsgBox (примеры)
В этом разделе я расскажу о различных типах кнопок, которые вы можете использовать с VBA MsgBox.
Прежде чем я покажу вам код VBA для него и то, как выглядит MsgBox, вот таблица, в которой перечислены все различные константы кнопок, которые вы можете использовать.
Константа кнопки | Описание |
vbOKOnly | Показывает только кнопку ОК |
vbOKCancel | Показывает кнопки ОК и Отмена |
vbAbortRetryIgnore | Показывает кнопки «Прервать», «Повторить» и «Игнорировать» |
vbYesNo | Показывает кнопки Да и Нет |
vbYesNoCancel | Показывает кнопки Да, Нет и Отмена |
vbRetryCancel | Показывает кнопки «Повторить» и «Отменить» |
vbMsgBoxHelpButton | Показывает кнопку справки. Чтобы это работало, вам нужно использовать аргументы справки и контекста в функции MsgBox |
vbDefaultButton1 | Делает первую кнопку по умолчанию. Вы можете изменить номер, чтобы изменить кнопку по умолчанию. Например, vbDefaultButton2 делает вторую кнопку по умолчанию |
Примечание. Просматривая примеры создания различных кнопок, вы можете задаться вопросом, какой смысл использовать эти кнопки, если они не влияют на код.
Влияют! В зависимости от выбора вы можете кодировать то, что вы хотите, чтобы код делал. Например, если вы выберете «ОК», код должен продолжиться, а если вы нажмете «Отмена», код должен прекратиться. Это можно сделать с помощью переменных и присвоения значения окна сообщения переменной. Мы рассмотрим это в последующих разделах этого урока.
Теперь давайте рассмотрим несколько примеров того, как различные кнопки могут отображаться в MsgBox и как они выглядят.
Кнопки MsgBox — vbOKOnly (по умолчанию)
Если вы используете только приглашение и не указываете ни один из аргументов, вы получите окно сообщения по умолчанию, как показано ниже:
Ниже приведен код, который выдаст это окно сообщения:
Sub DefaultMsgBox() MsgBox "This is a sample box" End Sub
Обратите внимание, что текстовая строка должна быть в двойных кавычках.
Вы также можете использовать постоянную кнопку vbOKOnly, но даже если вы ничего не указали, она используется по умолчанию.
Кнопки MsgBox — ОК и Отмена
Если вы хотите показать только ОК и кнопку Отмена, вам нужно использовать константу vbOKCancel
Sub MsgBoxOKCancel() MsgBox "Want to Continue?", vbOKCancel End Sub
Кнопки MsgBox — Отмена, Повтор и Игнорирование
Вы можете использовать константу vbAbortRetryIgnore для отображения кнопок «Отмена», «Повторить» и «Игнорировать».
Sub MsgBoxAbortRetryIgnore() MsgBox "What do you want to do?", vbAbortRetryIgnore End Sub
Кнопки MsgBox — Да и Нет
Вы можете использовать константу vbYesNo для отображения кнопок Да и Нет.
Sub MsgBoxYesNo() MsgBox "Should we stop?", vbYesNo End Sub
Кнопки MsgBox — Да, Нет и Отмена
Вы можете использовать константу vbYesNoCancel для отображения кнопок «Да», «Нет» и «Отмена».
Sub MsgBoxYesNoCancel() MsgBox "Should we stop?", vbYesNoCancel End Sub
Кнопки MsgBox — повторить попытку и отменить
Вы можете использовать константу vbRetryCancel для отображения кнопок «Повторить» и «Отмена».
Sub MsgBoxRetryCancel() MsgBox "What do you want to do next?", vbRetryCancel End Sub
Кнопки MsgBox — Кнопка справки
Вы можете использовать константу vbMsgBoxHelpButton для отображения кнопки справки. Вы можете использовать его с другими константами кнопок.
Sub MsgBoxRetryHelp() MsgBox "What do you want to do next?", vbRetryCancel + vbMsgBoxHelpButton End Sub
Обратите внимание, что в этом коде мы объединили две разные константы кнопки (vbRetryCancel + vbMsgBoxHelpButton). Первая часть показывает кнопки «Повторить» и «Отмена», а вторая часть показывает кнопку «Справка».
MsgBox Buttons — Настройка кнопки по умолчанию
Вы можете использовать константу vbDefaultButton1 для установки первой кнопки по умолчанию. Это означает, что кнопка уже выбрана, и если вы нажмете Enter, она выполнит эту кнопку.
Ниже приведен код, который установит в качестве кнопки по умолчанию вторую кнопку (кнопка «Нет»).
Sub MsgBoxOKCancel() MsgBox "What do you want to do next?", vbYesNoCancel + vbDefaultButton2 End Sub
В большинстве случаев крайняя левая кнопка является кнопкой по умолчанию. Вы можете выбрать другие кнопки, используя vbDefaultButton2, vbDefaultButton3 и vbDefaultButton4.
Константы значков Excel VBA MsgBox (примеры)
Помимо кнопок, вы также можете настроить значки, отображаемые в диалоговом окне MsgBox. Например, у вас может быть красный критический значок или синий информационный значок.
Ниже приведена таблица со списком кода, который будет отображать соответствующий значок.
Константа значка | Описание |
vbCritical | Показывает значок критического сообщения |
vbQuestion | Показывает значок вопроса |
vbExclamation | Показывает значок предупреждения |
vbInformation | Показывает значок информации |
Иконки MsgBox — Критические
Если вы хотите показать критический значок в своем MsgBox, используйте константу vbCritical. Вы можете использовать ее вместе с другими константами кнопки (поставив знак + между кодами).
Например, ниже приведен код, который будет показывать кнопку ОК по умолчанию с критическим значком.
Sub MsgBoxCriticalIcon() MsgBox "This is a sample box", vbCritical End Sub
Если вы хотите показать критический значок с кнопками Да и Нет, используйте следующий код:
Sub MsgBoxCriticalIcon() MsgBox "This is a sample box", vbYesNo + vbCritical End Sub
Иконки MsgBox — Вопрос
Если вы хотите показать иконку вопроса в своем MsgBox, используйте константу vbQuestion.
Sub MsgBoxQuestionIcon() MsgBox "This is a sample box", vbYesNo + vbQuestion End Sub
Иконки MsgBox — Восклицательный знак
Если вы хотите показать восклицательный значок в вашем MsgBox, используйте константу vbExclamation.
Sub MsgBoxExclamationIcon() MsgBox "This is a sample box", vbYesNo + vbExclamation End Sub
Иконки MsgBox — Информация
Если вы хотите отобразить информационный значок в вашем MsgBox, используйте константу vbInformation.
Sub MsgBoxInformationIcon() MsgBox "This is a sample box", vbYesNo + vbInformation End Sub
Настройка заголовка и приглашения в MsgBox
При использовании MsgBox вы можете настроить заголовок и сообщения подсказок.
До сих пор в примерах, которые мы видели, использовался Microsoft Excel в качестве заголовка. Если вы не указали аргумент title, MsgBox автоматически использует заголовок приложения (в данном случае это был Microsoft Excel).
Вы можете настроить заголовок, указав его в коде, как показано ниже:
Sub MsgBoxInformationIcon() MsgBox "Do you want to continue?", vbYesNo + vbQuestion, "Step 1 of 3" End Sub
Точно так же вы также можете настроить сообщение подсказки.
Вы также можете добавить разрывы строк в сообщении подсказки.
В приведенном ниже коде я добавил разрыв строки, используя «vbNewLine».
Sub MsgBoxInformationIcon() MsgBox "Do you want to continue?" & vbNewLine & "Click Yes to Continue", vbYesNo + vbQuestion, "Step 1 of 3" End Sub
Вы также можете использовать символ возврата каретки — Chr (13) или перевод строки — Chr (10), чтобы вставить новую строку в сообщение с подсказкой.
Обратите внимание, что вы можете добавить новую строку только к сообщению, а не к заголовку.
Присвоение значения MsgBox переменной
До сих пор мы видели примеры, где мы создавали окна сообщений и настраивали кнопки, значки, заголовок и приглашение.
Однако нажатие кнопки ничего не сделало.
С помощью функции MsgBox в Excel вы можете решить, что вы хотите делать, когда пользователь нажимает определенную кнопку. И это возможно, поскольку каждая кнопка имеет значение, связанное с ней.
Поэтому, если я нажимаю кнопку «Да», функция MsgBox возвращает значение (6 или константа vbYes), которое я могу использовать в своем коде. Аналогично, если пользователь выбирает кнопку «Нет», он возвращает другое значение ((7 или константа vbNo)), которое я могу использовать в коде.
Ниже приведена таблица, которая показывает точные значения и константу, возвращаемую функцией MsgBox. Вам не нужно запоминать их, просто помните об этом, и вы можете использовать константы, которые проще в использовании.
При нажатии кнопки | Константа | Значение |
Ok | vbOk | 1 |
Cancel | vbCancel | 2 |
Abort | vbAbort | 3 |
Retry | vbRetry | 4 |
Ignore | vbIgnore | 5 |
Yes | vbYes | 6 |
No | vbNo | 7 |
Теперь давайте посмотрим, как мы можем контролировать макрос-код VBA в зависимости от того, на какую кнопку нажимает пользователь.
В приведенном ниже коде, если пользователь нажимает кнопку «Да», отображается сообщение «Вы нажали кнопку «Да», а если пользователь нажимает кнопку «Нет», отображается сообщение «Вы нажали кнопку «Нет»».
Sub MsgBoxInformationIcon() Result = MsgBox("Do you want to continue?", vbYesNo + vbQuestion) If Result = vbYes Then MsgBox "You clicked Yes" Else: MsgBox "You clicked No" End If End Sub
В приведенном выше коде я присвоил значение функции MsgBox переменной Result. Когда вы нажимаете кнопку «Да», переменная Result получает константу vbYes (или число 6), а когда вы нажимаете «Нет», переменная Result получает константу vbNo (или число 7).
Затем я использовал конструкцию If Then Else, чтобы проверить, содержит ли переменная Result значение vbYes. Если это так, отображается запрос «Вы нажали Да», в противном случае — «Вы нажали Нет».
Вы можете использовать ту же концепцию для запуска кода, если пользователь нажимает Да, и выход из подпрограммы, когда он нажимает Нет.
Примечание. Когда вы присваиваете выход MsgBox переменной, вы должны поместить аргументы функции MsgBox в круглые скобки. Например, в строке Result = MsgBox («Хотите продолжить?», VbYesNo + vbQuestion) вы можете видеть, что аргументы находятся в скобках.
Если вы хотите в дальнейшем углубиться в функцию Message Box, вот официальный документ по ней.
In Excel VBA, you can use the MsgBox function to display a message box (as shown below):
A MsgBox is nothing but a dialog box that you can use to inform your users by showing a custom message or get some basic inputs (such as Yes/No or OK/Cancel).
While the MsgBox dialog box is displayed, your VBA code is halted. You need to click any of the buttons in the MsgBox to run the remaining VBA code.
Note: In this tutorial, I will be using the words message box and MsgBox interchangeably. When working with Excel VBA, you always need to use MsgBox.
Anatomy of a VBA MsgBox in Excel
A message box has the following parts:
- Title: This is typically used to display what the message box is about. If you don’t specify anything, it displays the application name – which is Microsoft Excel in this case.
- Prompt: This is the message that you want to display. You can use this space to write a couple of lines or even display tables/data here.
- Button(s): While OK is the default button, you can customize it to show buttons such as Yes/No, Yes/No/Cancel, Retry/Ignore, etc.
- Close Icon: You can close the message box by clicking on the close icon.
Syntax of the VBA MsgBox Function
As I mentioned, MsgBox is a function and has a syntax similar to other VBA functions.
MsgBox( prompt [, buttons ] [, title ] [, helpfile, context ] )
- prompt – This is a required argument. It displays the message that you see in the MsgBox. In our example, the text “This is a sample MsgBox” is the ‘prompt’. You can use up to 1024 characters in the prompt, and can also use it to display the values of variables. In case you want to show a prompt that has multiple lines, you can do that as well (more on this later in this tutorial).
- [buttons] – It determines what buttons and icons are displayed in the MsgBox. For example, if I use vbOkOnly, it will show only the OK button, and if I use vbOKCancel, it will show both the OK and Cancel buttons. I will cover different kinds of buttons later in this tutorial.
- [title] – Here you can specify what caption you want in the message dialog box. This is displayed in the title bar of the MsgBox. If you don’t specify anything, it will show the name of the application.
- [helpfile] – You can specify a help file that can be accessed when a user clicks on the Help button. The help button would appear only when you use the button code for it. If you’re using a help file, you also need to also specify the context argument.
- [context] – It is a numeric expression that is the Help context number assigned to the appropriate Help topic.
If you’re new to the concept of Msgbox, feel free to ignore the [helpfile] and [context] arguments. I have rarely seen these being used.
Note: All the arguments in square brackets are optional. Only the ‘prompt’ argument is mandatory.
Excel VBA MsgBox Button Constants (Examples)
In this section, I will cover the different types of buttons that you can use with a VBA MsgBox.
Before I show you the VBA code for it and how the MsgBox looks, here is a table that lists all the different button constants you can use.
Button Constant | Description |
vbOKOnly | Shows only the OK button |
vbOKCancel | Shows the OK and Cancel buttons |
vbAbortRetryIgnore | Shows the Abort, Retry, and Ignore buttons |
vbYesNo | Shows the Yes and No buttons |
vbYesNoCancel | Shows the Yes, No, and Cancel buttons |
vbRetryCancel | Shows the Retry and Cancel buttons |
vbMsgBoxHelpButton | Shows the Help button. For this to work, you need to use the help and context arguments in the MsgBox function |
vbDefaultButton1 | Makes the first button default. You can change the number to change the default button. For example, vbDefaultButton2 makes the second button as the default |
Note: While going through the examples of creating different buttons, you may wonder what’s the point of having these buttons if it doesn’t have any impact on the code.
It does! Based on the selection, you can code what you want the code to do. For example, if you select OK, the code should continue, and if you click Cancel, the code should stop. This can be done by using variables and assigning the value of the Message Box to a variable. We will cover this in the later sections of this tutorial.
Now let’s have a look at some examples of how the different buttons can be displayed in a MsgBox and how it looks.
MsgBox Buttons – vbOKOnly (Default)
If you only use the prompt and don’t specify any of the arguments, you will get the default message box as shown below:
Below is the code that will give this message box:
Sub DefaultMsgBox() MsgBox "This is a sample box" End Sub
Note that the text string needs to be in double quotes.
You can also use the button constant vbOKOnly, but even if you don’t specify anything, it’s taken as default.
MsgBox Buttons – OK & Cancel
If you only want to show the OK and the Cancel button, you need to use the vbOKCancel constant.
Sub MsgBoxOKCancel() MsgBox "Want to Continue?", vbOKCancel End Sub
MsgBox Buttons – Abort, Retry, and Ignore
You can use the ‘vbAbortRetryIgnore’ constant to show the Abort, Retry, and the Ignore buttons.
Sub MsgBoxAbortRetryIgnore() MsgBox "What do you want to do?", vbAbortRetryIgnore End Sub
MsgBox Buttons – Yes and No
You can use the ‘vbYesNo’ constant to show the Yes and No buttons.
Sub MsgBoxYesNo() MsgBox "Should we stop?", vbYesNo End Sub
MsgBox Buttons – Yes, No and Cancel
You can use the ‘vbYesNoCancel’ constant to show the Yes, No, and Cancel buttons.
Sub MsgBoxYesNoCancel() MsgBox "Should we stop?", vbYesNoCancel End Sub
MsgBox Buttons – Retry and Cancel
You can use the ‘vbRetryCancel’ constant to show the Retry and Cancel buttons.
Sub MsgBoxRetryCancel() MsgBox "What do you want to do next?", vbRetryCancel End Sub
MsgBox Buttons – Help Button
You can use the ‘vbMsgBoxHelpButton’ constant to show the help button. You can use it with other button constants.
Sub MsgBoxRetryHelp() MsgBox "What do you want to do next?", vbRetryCancel + vbMsgBoxHelpButton End Sub
Note that in this code, we have combined two different button constants (vbRetryCancel + vbMsgBoxHelpButton). The first part shows the Retry and Cancel buttons and the second part shows the Help button.
MsgBox Buttons – Setting a Default Button
You can use the ‘vbDefaultButton1’ constant to set the first button as default. This means that the button is already selected and if you press enter, it executes that button.
Below is the code that will set the second button (the ‘No’ button) as the default.
Sub MsgBoxOKCancel() MsgBox "What do you want to do next?", vbYesNoCancel + vbDefaultButton2 End Sub
In most cases, the left-most button is the default button. You can choose other buttons using vbDefaultButton2, vbDefaultButton3, and vbDefaultButton4.
Excel VBA MsgBox Icon Constants (Examples)
Apart from the buttons, you can also customize the icons that are displayed in the MsgBox dialog box. For example, you can have a red critical icon or a blue information icon.
Below is a table that lists the code that will show the corresponding icon.
Icon Constant | Description |
vbCritical | Shows the critical message icon |
vbQuestion | Shows the question icon |
vbExclamation | Shows the warning message icon |
vbInformation | Shows the information icon |
MsgBox Icons – Critical
If you want to show a critical icon in your MsgBox, use the vbCritical constant. You can use this along with other button constants (by putting a + sign in between the codes).
For example, below is a code that will show the default OK button with a critical icon.
Sub MsgBoxCriticalIcon() MsgBox "This is a sample box", vbCritical End Sub
If you want to show the critical icon with Yes and No buttons, use the following code:
Sub MsgBoxCriticalIcon() MsgBox "This is a sample box", vbYesNo + vbCritical End Sub
MsgBox Icons – Question
If you want to show a critical icon in your MsgBox, use the vbQuestion constant.
Sub MsgBoxQuestionIcon() MsgBox "This is a sample box", vbYesNo + vbQuestion End Sub
MsgBox Icons – Exclamation
If you want to show an exclamation icon in your MsgBox, use the vbExclamation constant.
Sub MsgBoxExclamationIcon() MsgBox "This is a sample box", vbYesNo + vbExclamation End Sub
MsgBox Icons – Information
If you want to show an information icon in your MsgBox, use the vbInformation constant.
Sub MsgBoxInformationIcon() MsgBox "This is a sample box", vbYesNo + vbInformation End Sub
Customizing Title and Prompt in the MsgBox
When using MsgBox, you can customize the title and the prompt messages.
So far, the example we have seen have used Microsoft Excel as the title. In case you don’t specify the title argument, MsgBox automatically uses the title of the application (which has been Microsoft Excel in this case).
You can customize the title by specifying it in the code as shown below:
Sub MsgBoxInformationIcon() MsgBox "Do you want to continue?", vbYesNo + vbQuestion, "Step 1 of 3" End Sub
Similarly, you can also customize the prompt message.
You can also add line breaks in the prompt message.
In the below code, I have added a line break using ‘vbNewLine’.
Sub MsgBoxInformationIcon() MsgBox "Do you want to continue?" & vbNewLine & "Click Yes to Continue", vbYesNo + vbQuestion, "Step 1 of 3" End Sub
You can also use the carriage return character – Chr(13) – or line feed – Chr(10) to insert a new line in the prompt message.
Note that you can add a new line to the prompt message only and not the title.
Assigning MsgBox Value to a Variable
So far, we have seen the examples where we have created message boxes and customized the buttons, icons, title, and prompt.
However, clicking a button has done nothing.
With MsgBox function in Excel, you can decide what you want to do when a user clicks a specific button. And this is possible as every button has a value associated to it.
So if I click on the Yes button, the MsgBox function returns a value (6 or the constant vbYes) which I can use in my code. Similarly, is the user selects the No button, it returns a different value ((7 or the constant vbNo)) that I can use in the code.
Below is a table that shows the exact values and the constant returned by the MsgBox function. You don’t need to memorize these, just be aware of it and you can use the constants which are easier to use.
Button Clicked | Constant | Value |
Ok | vbOk | 1 |
Cancel | vbCancel | 2 |
Abort | vbAbort | 3 |
Retry | vbRetry | 4 |
Ignore | vbIgnore | 5 |
Yes | vbYes | 6 |
No | vbNo | 7 |
Now let’s see how we can control the VBA macro code based on what button a user clicks.
In the below code, if the user clicks Yes, it displays the message “You Clicked Yes”, and if the user clicks No, it displays, “You clicked No”.
Sub MsgBoxInformationIcon() Result = MsgBox("Do you want to continue?", vbYesNo + vbQuestion) If Result = vbYes Then MsgBox "You clicked Yes" Else: MsgBox "You clicked No" End If End Sub
In the above code, I have assigned the value of the MsgBox function to the Result variable. When you click Yes button, the Result variable gets the vbYes constant (or the number 6) and when you click No, the Result variable gets the vbNo constant (or the number 7).
Then I used an If Then Else construct to check if the Result variable holds the value vbYes. If it does, it shows the prompt “You Clicked Yes”, else it shows “You clicked No”.
You can use the same concept to run a code if a user clicks Yes and exit the sub when he/she clicks No.
Note: When you assign the MsgBox output to a variable, you need to put the arguments of MsgBox function in parenthesis. For example, in the line Result = MsgBox(“Do you want to continue?”, vbYesNo + vbQuestion), you can see that the arguments are within parenthesis.
If you want to further dig into the Message Box function, here is the official document on it.
You May Also Like the Following Excel VBA Tutorials:
- Excel VBA Split Function.
- Excel VBA InStr Function.
- Working with Cells and Ranges in Excel VBA.
- Working with Worksheets in VBA.
- Working with Workbooks in VBA.
- Using Loops in Excel VBA.
- Understanding Excel VBA Data Types (Variables and Constants)
- How to Create and Use Personal Macro Workbook in Excel.
- Useful Excel Macro Code Examples.
- Using For Next Loop in Excel VBA.
- Excel VBA Events – An Easy (and Complete) Guide.
- How to Run a Macro in Excel – A Complete Step-by-Step Guide.
- How to Create and Use an Excel Add-in.
- Using Active Cell in VBA in Excel (Examples)
Хитрости »
19 Октябрь 2014 101533 просмотров
Работа с диалогами
Несомненно каждый разработчик делает работу простого пользователя хоть немного, но проще. И конечно, порой просто необходима обратная связь от пользователя при выполнении некоторых программ. О ней и хочу сегодня рассказать.
Что я имею ввиду: есть ситуации, когда необходимо:
- сообщить пользователю о выполнении кода;
- получить от пользователя подтверждение на выполнение того или иного действия;
- запросить какие-то данные(число, текст для поиска, диапазон поиска и т.п.).
Простейшие запросы и подтверждения можно сделать при помощи уже встроенных диалоговых окон.
Из основных можно выделить три типа:
MsgBox — окно информирования пользователя с возможностью запроса действия (Да, Нет, Отмена и т.п.);
InputBox — окно запроса текстовой информации от пользователя (текст для поиска, дата, число и т.п.);
Application.InputBox — чуть более расширенная версия InputBox с возможностью указания не только текста и чисел, но и выделения диапазона ячеек (например для указания ячеек, в которых осуществлять поиск значения или которые необходимо закрасить).
- Информационный диалог MsgBox
- MsgBox, автоматически закрываемый по истечении указанного времени
- Диалог ввода информации пользователем InputBox
- Диалог выбора диапазона Application.InputBox
Самый простой тип. Используется для информирования пользователя. Как правило применяется по окончании выполнения кода:
MsgBox Promt, [Buttons], [Title], [HelpFile], [Context]
Обязательным к указанию является только первый параметр —
Promt
, в котором указывается непосредственно сообщение для вывода:
MsgBox "Обработка завершена"
Все остальные параметры указывать не обязательно, но их использование несколько расширяет возможности данного диалогового окна.
Buttons — указывается тип выводимых кнопок и стиль окна. По умолчанию применяется vbOKOnly — одна только кнопка Ок:
'показываем окно с кнопкой по умолчанию и типом важного сообщения MsgBox "Обработка завершена", vbCritical
Доступны значения:
Значение | Числовая константа | Описание |
---|---|---|
vbOKOnly | 0 | Отображает только кнопку OK |
vbOKCancel | 1 | Отображает кнопки ОК и Отмена |
vbAbortRetryIgnore | 2 | Отображает кнопки Прервать, Повтор и Пропустить |
vbYesNoCancel | 3 | Отображает кнопки Да, Нет и Отмена |
vbYesNo | 4 | Отображает кнопки Да и Нет |
vbRetryCancel | 5 | Отображает кнопки Повтор и Отмена |
vbCritical | 16 | Отображает значок важного сообщения |
vbQuestion | 32 | Отображает значок важного запроса |
vbExclamation | 48 | Отображает значок предупреждающего сообщения |
vbInformation | 64 | Отображает значок информационного сообщения |
vbDefaultButton1 | 0 | По умолчанию выделена первая кнопка |
vbDefaultButton2 | 256 | По умолчанию выделена вторая кнопка |
vbDefaultButton3 | 512 | По умолчанию выделена третья кнопка |
vbDefaultButton4 | 768 | По умолчанию выделена четвертая кнопка |
vbApplicationModal | 4098 | Все приложения приостанавливают свою работу до момента, пока пользователь ответит на запрос в окне сообщения (работает не во всех случаях) |
vbMsgBoxHelpButton | 16384 | Показываются кнопки Ок и Help |
Константы Buttons могут быть объединены между собой. Ниже приведен код, который показывает диалоговое окно с возможностью выбора одного из трех вариантов — Прервать, Повтор, Пропустить:
'--------------------------------------------------------------------------------------- ' Procedure : test ' DateTime : 19.10.2014 19:24 ' Author : The_Prist(Щербаков Дмитрий) ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' http://www.excel-vba.ru ' Purpose : Процедура показывает диалоговое окно с возможностью выбора одного из трех вариантов: ' Прервать, Повтор, Пропустить ' По умолчанию выделена кнопка Прервать, т.к. иное не указано '--------------------------------------------------------------------------------------- Sub test() Dim lRetVal As Long 'для получения выбранного значения Retry_: lRetVal = MsgBox("Обработка завершена", vbAbortRetryIgnore + vbQuestion) Select Case lRetVal Case vbAbort '3/Прервать/Abort Exit Sub 'выходим из процедуры Case vbRetry '4/Повтор/Retry GoTo Retry_ 'переход на метку Retry_ Case vbIgnore '5/Пропустить/Ignore End Select End Sub
Следующий код показывает то же окно, но по умолчанию выделяет кнопку Пропустить
'--------------------------------------------------------------------------------------- ' Procedure : test ' DateTime : 19.10.2014 19:24 ' Author : The_Prist(Щербаков Дмитрий) ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' http://www.excel-vba.ru ' Purpose : Процедура показывает диалоговое окно с возможностью выбора одного из трех вариантов: ' Прервать, Повтор, Пропустить ' По умолчанию выделена кнопка Пропустить(3-я по счету - значит vbDefaultButton3) '--------------------------------------------------------------------------------------- Sub test() Dim lRetVal As Long 'для получения выбранного значения Retry_: lRetVal = MsgBox("Обработка завершена", vbAbortRetryIgnore + vbQuestion + vbDefaultButton3) Select Case lRetVal Case vbAbort '3/Прервать/Abort Exit Sub 'выходим из процедуры Case vbRetry '4/Повтор/Retry GoTo Retry_ 'переход на метку Retry_ Case vbIgnore '5/Пропустить/Ignore End Select End Sub
Вместо текстового представления констант можно применить их числовые значения:
Sub test() Dim lRetVal As Long 'для получения выбранного значения Retry_: lRetVal = MsgBox("Обработка завершена", 2 + 32 + 512) Select Case lRetVal Case 3 'vbAbort Exit Sub 'выходим из процедуры Case 4 'vbRetry GoTo Retry_ 'переход на метку Retry_ Case 5 'vbIgnore End Select End Sub
Нетрудно после этого предположить, что можно указать просто сумму данных чисел:
MsgBox "Обработка завершена", 546
Доступные константы значений возврата:
Константа | Значение | Нажатая кнопка |
---|---|---|
vboK | 1 | ОК |
vbCancel | 2 | Отмена |
vbAbort | 3 | Прервать |
vbRetry | 4 | Повтор |
vblgnore | 5 | Пропустить |
vbYes | 6 | Да |
vbNo | 7 | Нет |
Title — указывается текст заголовка окна. Например, можно указать либо что это ошибка, либо имя своего приложения:
MsgBox "Обработка завершена", vbOKOnly, "Мое приложение"
HelpFile — указывается имя файла-справки в формате HLP. Применяется, если параметр Buttons указан как vbMsgBoxHelpButton. Файл справки должен существовать.
Context — целое число. Указывается индекс страницы файла-справки, которую необходимо открыть. Указывается только если указан параметр HelpFile.
Небольшой практический пример применения простого диалогового окна MsgBox.
Цель процедуры(макроса): очистить все ячейки листа.
Согласитесь, что неплохо бы перед этим запросить у пользователя решение — он согласен с этим и это является обдуманным решением или случайностью?
'--------------------------------------------------------------------------------------- ' Procedure : ClearRange ' DateTime : 19.10.2014 20:06 ' Author : The_Prist(Щербаков Дмитрий) ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' http://www.excel-vba.ru ' Purpose : '--------------------------------------------------------------------------------------- Sub ClearRange() Dim lRetVal As Long 'для получения выбранного значения lRetVal = MsgBox("Все данные выделенных ячеек будут удалены." & _ Chr(10) & "Действительно хотите продолжить?", _ vbYesNo + vbQuestion, "Запрос на выполнение") If lRetVal = vbNo Then Exit Sub 'выходим из процедуры без выполнения End If Selection.Clear End Sub
Так же на странице Полезные программы для Excel и VBA можно найти программу MsgBox Generator, которая просто и наглядно формирует коды показа MsgBox.
Диалог MsgBox удобен, если надо проинформировать пользователя о каких-то событиях или предоставить ему выбор Да или Нет. Но в тоже время есть один недостаток: этот диалог не закроется, пока пользователь не нажмет хоть какую-то кнопку. Но бывает необходимо просто проинформировать и закрыть окно независимо от реакции пользователя. Показали окно, подождали секунд 5-7 и даже если пользователь ничего не нажал — закрыли окно и продолжили выполнение кода. Стандартно такой опции в MsgBox нет. Однако можно использовать функции API(это встроенные в ОС Windows функции, которые можно вызывать из любого языка программирования).
Код такого диалога:
Declare Function MessageBoxTimeOut Lib "User32" Alias "MessageBoxTimeoutA" _ (ByVal hwnd As Long, ByVal lpText As String, _ ByVal lpCaption As String, ByVal uType As VbMsgBoxStyle, _ ByVal wLanguageId As Long, ByVal dwMilliseconds As Long) As Long Sub AutoCloseMsgBox() Const lSeconds As Long = 5 MessageBoxTimeOut 0, "Отчет сформирован. Это окно закроется автоматически через 5 секунд", "www.excel-vba.ru", _ vbInformation + vbOKOnly, 0&, lSeconds * 1000 End Sub
Основную роль здесь играет строка:
Declare Function MessageBoxTimeOut Lib "User32" Alias "MessageBoxTimeoutA" _ (ByVal hwnd As Long, ByVal lpText As String, _ ByVal lpCaption As String, ByVal uType As VbMsgBoxStyle, _ ByVal wLanguageId As Long, ByVal dwMilliseconds As Long) As Long
это и есть сама функция, создающая MsgBox.
Главное: эта строка должна располагаться в самом верху стандартного модуля(в области объявлений, перед всеми процедурами и функциями).
Так же следует помнить, что это функция API и в некоторых версиях Excel именно в таком виде может не работать — вся строка будет подсвечена красным. Если проявился такой эффект, то можно просто добавить ключевое слово PtrSafe, отвечающее за совместимость функции с 64-битными ОС:
Declare PtrSafe Function MessageBoxTimeOut Lib "User32" Alias "MessageBoxTimeoutA" _ (ByVal hwnd As Long, ByVal lpText As String, _ ByVal lpCaption As String, ByVal uType As VbMsgBoxStyle, _ ByVal wLanguageId As Long, ByVal dwMilliseconds As Long) As Long
Помимо очевидного текста сообщения и заголовка, который можно заменить на свой, главное внимание уделим константе lSeconds. Она отвечает за количество секунд показа сообщения. В примере выше сообщение будет показано на 5 секунд, после чего закроется само собой, если ранее не была нажата кнопка Ок.
Если необходимо показать сообщение на 10 секунд, то надо лишь заменить 5 на 10:
Const lSeconds As Long = 10
Параметр uType работает точно так же, как параметр Buttons у стандартного MsgBox. Т.е. можно комбинировать различные виды кнопок и использовать этот MsgBox как стандартный, но при этом закрыть его автоматически, если пользователь случайно «уснул» или ему лень/некогда что-то нажимать:
Sub AutoCloseMsgBox() Const lSeconds As Long = 10 Dim retval retval = MessageBoxTimeOut(0, "Файлы обработаны. Вывести список?" & vbNewLine & _ "Если действие не будет выбрано окно закроется через 10 секунд", "www.excel-vba.ru", _ vbInformation + vbYesNo, 0&, lSeconds * 1000) If retval = 6 Then 'была нажата кнопка Да(Yes) 'выводим отчет Else 'была нажата кнопка Нет(No) или окно закрылось само 'другое действие End If End Sub
InputBox
позволяет запросить от пользователя любую текстовую информацию.
InputBox Promt, [Title], [DefaultValue], [XPos], [YPos], [HelpFile], [Context]
Так же как и с MsgBox обязательным аргументом для указания является только
Promt
— это тот текст, который будет расположен непосредственно на самой форме диалога. Как правило это пояснение, что должен ввести пользователь.
Dim vRetVal 'для получения выбранного значения vRetVal = InputBox("Укажите значение для поиска:", "Запрос данных", "") If vRetVal = "" Then Exit Sub 'завершаем процедуру, если строка пуста
Title — текст, отображаемый в заголовке окна. В приведенном выше примере это «Запрос данных».
DefaultValue — значение, которое будет показано в поле ввода до указания значения пользователем. Как правило оно указывается в случаях, когда требуемое значение изменяется редко по запросу пользователя, но возможность такую оставить все же требуется.
Пример: необходимо по нажатию кнопки удалять всегда столбец 5. Но иногда столбец в отчете смещается и требуется запрашивать у пользователя реальный номер столбца:
Sub DelCols() Dim vRetVal 'для получения выбранного значения vRetVal = InputBox("Укажите номер столбца для удаления(целое число):", "Запрос данных", 5) 'используем Val для преобразования текста vRetVal в число 'Val() преобразует число как текст в число. 'Если указан текст(например "третий") - он будет преобразован в 0 vRetVal = Val(vRetVal) If Val(vRetVal) = 0 Then MsgBox "Номер столбца должен быть целым числом больше нуля!", vbCritical, "DelCols" Exit Sub End If Columns(vRetVal).Delete End Sub
Важно знать: InputBox всегда возвращает только текст. Даже если указать — 5 — он вернет «5». В некоторых случаях это может привести к ошибке типов данных, поэтому я привел выше один из примеров преобразования типов данных к нужному.
Так же по прошествии какого-то времени появится вопрос, как отследить нажатие кнопки Отмена. Ведь ориентир на vRetVal = «» не всегда верен, иногда надо принять пустое значение(в случаях, скажем, замены значений) и отследить именно нажатие Отмена. Сделать это можно так:
vRetVal = InputBox("Укажите номер столбца для удаления(целое число):", "Запрос данных", "") If StrPtr(vRetVal) = 0 Then MsgBox "Нажата кнопка Отмена. Процедура прервана", vbCritical, "DelCols" Exit Sub End If
Больше всего вопросов здесь явно вызовет StrPtr. Эта специальная функция VBA, которая указывает, что переданы некие строковые данные. Если никаких данных не передавалось(а в случае с нажатием кнопки Отмена так и есть) указатель вернет 0. Если какие-то данные были переданы или нажата кнопка Ок(автоматом будет передана строка нулевой длины) — указатель StrPtr вернет значение отличное от нуля.
XPos — положение окна InputBox в твипах по горизонтали относительно левого края экрана. Следует учитывать, что именно относительно экрана, а не окна Excel.
YPos — положение окна InputBox в твипах по вертикали относительно верхнего края экрана.
HelpFile — указывается имя файла-справки в формате HLP. В отличие от MsgBox указание файла допускается при любых значениях. При этом к уже имеющимся в InputBox кнопкам добавляется еще одна — Help, которая и отвечает за вызов справки.
Context — целое число. Указывается индекс страницы файла-справки, которую необходимо открыть при нажатии кнопки Help. Указывается только если указан параметр HelpFile.
В дополнение приведу классический пример применения InputBox — выполнение процедуры только после введения пароля:
Sub ClearAllCells() Dim vRetVal vRetVal = InputBox("Введите пароль:", "Авторизация", "") If StrPtr(vRetVal) = 0 Then 'Нажата кнопка Отмена Exit Sub End If 'если пароль неверный - завершаем процедуру без выполнения действий If vRetVal <> "1234" Then MsgBox "Введенный пароль неверный", vbCritical, "ClearAllCells" Exit Sub End If 'будет выполнено только если введен правильный пароль - 1234 'полная очистка всех ячеек активного листа ActiveSheet.Cells.Clear End Sub
А вот еще один пример применения — запрос имени пользователя и запись его в лист LOG, чтобы можно было отследить кто и когда открывал файл. При этом если пользователь нажал Отмена, то книга закроется, а если не укажет имя пользователя — появится сообщение и заново запрос. И так до тех пор, пока имя пользователя не будет введено или не будет нажата кнопка Отмена:
Private Sub Workbook_Open() 'ThisWorkbook - Обращение к книге с кодом 'Но из модуля самой книги можно обращаться и проще - Me ThisWorkbook.Visible = False Dim user As String, lastrow As Long 'цикл, пока не будут указаны данные пользователя Do While user = "" user = InputBox("Введите имя пользователя:", "Авторизация", "") If StrPtr(user) = 0 Then MsgBox "Приложение будет закрыто", vbCritical, "Авторизация" ThisWorkbook.Close Exit Sub End If If user = "" Then MsgBox "Не указано имя пользователя!", vbCritical, "Авторизация" End If Loop With ThisWorkbook.Worksheets("LOG") 'получаем последнюю заполненную ячейку на листе "LOG" lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row 'записываем имя пользователя .Cells(lastrow + 1, 1) = user 'записываем время входа .Cells(lastrow + 1, 2) = Now End With End Sub
Что важно: этот код записывается в модуль ЭтаКнига(ThisWorkbook) и тогда при любом открытии книги будет появляться запрос на имя пользователя.
Так же некоторые примеры применения InputBox можно найти в статьях на сайте. Например:
Как удалить строки по условию?
Как массово изменить гиперссылки?
ДИАЛОГ ВВОДА ИНФОРМАЦИИ ПОЛЬЗОВАТЕЛЕМ — APPLICATION.INPUTBOX
В общем-то данный диалог мало отличается от обычного InputBox, за исключением типов возвращаемых данных. У данного диалога намного богаче функционал определения типов данных.
InputBox Promt, [Title], [DefaultValue], [Left], [Top], [HelpFile], [HelpContextID], [Type]
почти все параметры аналогичны таким же параметрам в InputBox.
Promt — текст, отображаемый на самой форме. Иначе говоря — сама суть показа диалога.
Title — текст, отображаемый в заголовке окна. В приведенном выше примере это «Запрос данных».
DefaultValue — значение, которое будет показано в поле ввода до указания значения пользователем.
Left — положение окна InputBox в поинтах по горизонтали относительно левого края экрана. В отличие от простого InputBox положение определяется на основании расположения самого окна Excel, а не экрана.
Top — положение окна InputBox в твипах по вертикали относительно верхнего края экрана.
HelpFile — указывается имя файла-справки в формате HLP. В отличие от MsgBox указание файла допускается при любых значениях. При этом к уже имеющимся в InputBox кнопкам добавляется еще одна — Help, которая и отвечает за вызов справки. Сам вызов справки осуществляется путем нажатия на иконку со знаком вопроса в заголовке диалога.
HelpContextID — целое число. Указывается индекс страницы файла-справки, которую необходимо открыть при нажатии кнопки Help. Указывается только если указан параметр HelpFile.
Type — целое число. Указывается одно из предустановленных значений, указывающих диалогу Application.InputBox тип данных, которые предполагается получить от пользователя. Ниже приведен листинг кода, демонстрирующий запрос данных всех типов с описанием ограничений и нюансов.
Dim vRetVal 'для получения выбранного значения 'запрос формулы - Type:=0 'возвращает либо произвольный текст, указанный в поле или ссылку на указанную ячейку в стиле R1C1 vRetVal = Application.InputBox("Укажите формулу:", "Запрос данных", "", Type:=0) 'запрос числа - Type:=1 'возвращает число. Не даст ввести текст, выдав сообщение об ошибке vRetVal = Application.InputBox("Укажите любое число:", "Запрос данных", "", Type:=1) 'запрос текст - Type:=2 'возвращает указанный текст. При указании числа оно будет в виде текста: 1="1" vRetVal = Application.InputBox("Укажите любой текст:", "Запрос данных", "", Type:=2) 'запрос логического значения True или False - Type:=4 'значение указывает в текущей локализации офиса 'для русской это ИСТИНА или ЛОЖЬ 'так же можно указать универсальные числовые константы - 1 или 0. 1 - ИСТИНА; 0 - ЛОЖЬ 'Не даст ввести иные значения, выдав сообщение об ошибке 'возвращает указанное логическое значение в английской локализации vRetVal = Application.InputBox("Укажите ИСТИНА или ЛОЖЬ:", "Запрос данных", "", Type:=4) 'запрос диапазона - Type:=8 'возвращает ссылку на диапазон 'При получении такого значения обязательно следует использовать оператор Set 'В противном случае вернет значение массива(Array), содержащего значения указанных ячеек 'при указании через Set и нажатии Отмена будет ошибка VBA Set vRetVal = Application.InputBox("Укажите диапазон для очистки ячеек:", "Запрос данных", "", Type:=8) 'запрос значения ошибки #Н/Д - Type:=16 'всегда возвращает значение ошибки #Н/Д независимо от введенного значения vRetVal = Application.InputBox("Укажите диапазон для очистки ячеек:", "Запрос данных", "", Type:=16) 'запрос диапазона ячеек для создания массива - Type:=64 'возвращает массив ячеек с границами начала от 1(Option Base 1) 'если указать всего одну ячейку vRetVal будет содержать значение этой ячейки, а не массив vRetVal = Application.InputBox("Укажите диапазон для создания массива:", "Запрос данных", "", Type:=64)
Конечно, чаще всего используют Type:=8, т.к. это избавляет от необходимости рисования своих форм и прочих заморочек для запроса указания диапазона от пользователя. Еще раз обращаю внимание, что для Type:=8 необходим ключевой оператор присвоения Set, т.к. в результате необходимо получить именно диапазон(т.е. объект). Ниже приведена процедура, которая запрашивает диапазон для очистки и корректно обрабатывает ситуацию при нажатии кнопки Отмена(т.е. не показывает никаких ошибок пользователю, а просто не выполняется). Стандартно при нажатии Отмена процедура завершается с ошибкой VBA вида Type Mismatch, что не очень грамотно с точки зрения взаимодействия с пользователем — он не должен видеть внутренние ошибки:
'--------------------------------------------------------------------------------------- ' Procedure : ClearCells ' DateTime : 19.10.2014 22:53 ' Author : The_Prist(Щербаков Дмитрий) ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' http://www.excel-vba.ru ' Purpose : ' Запрашиваем диапазон ячеек для очистки. ' По умолчанию заносится диапазон выделенных на момент запуска ячеек '--------------------------------------------------------------------------------------- Sub ClearCells() Dim vRetVal 'для получения выбранного значения On Error Resume Next Set vRetVal = Application.InputBox("Укажите диапазон для очистки ячеек:", "Запрос данных", Selection.Address, Type:=8) If vRetVal Is Nothing Then 'нажата кнопка Отмена - диапазон не выбран MsgBox "Отмена выполнения", vbCritical, "Нет данных" Exit Sub 'завершаем процедуру, т.к. ячейки не выбраны End If 'диапазон выбран - очищаем ячейки vRetVal.Clear End Sub
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
In this VBA Tutorial, you learn how to create message boxes and specify their most important characteristics, such as the following:
- How to specify the message displayed in the message box.
- How to customize or specify the buttons displayed by the message box.
- How to work with the value returned by the MsgBox function, and assign this value to a variable.
- How to specify the icon style used by the message box.
- How to specify the default button of in the message box.
- How to specify the modality of the message box.
This Excel VBA MsgBox Tutorial is accompanied by an Excel workbook containing the macros I use in the examples below. You can get immediate access to this example workbook by clicking the button below.
Use the following Table of Contents to navigate to the section that interests you.
Related VBA and Macro Tutorials
The following VBA and Macro Tutorials may help you better understand and implement the contents below:
- General VBA constructs and structures:
- Learn how to start working with macros here.
- Learn about essential VBA terms here.
- Learn how to enable or disable macros here.
- Learn how to work with the VBE here.
- Learn how to create and work with Sub procedures here.
- Learn how to declare and work with variables here.
- Learn about VBA data types here.
- Learn how to work with functions in VBA here.
- Practical VBA applications and macro examples:
- Learn how to create UserForms here.
You can find additional VBA and Macro Tutorials in the Archives.
#1: Create MsgBox
VBA code to create MsgBox
To create a basic message box with VBA, use a statement with the following structure:
MsgBox Prompt:=PromptString
Process to create MsgBox
To create a basic message box with VBA, use the MsgBox function (MsgBox …).
VBA statement explanation
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a basic message box using this statement structure:
- The displayed message is PromptString.
- The message box contains a single button: OK. For purposes of including other custom button layouts, please refer to the appropriate sections of this Tutorial.
- The value returned by the MsgBox function is vbOK (or 1). For purposes of assigning the value returned by the MsgBox function to a variable, please refer to the appropriate section of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
Macro example to create MsgBox
The following macro example creates a basic message box with the message “Create Excel VBA MsgBox”.
Sub createMsgBox() 'source: https://powerspreadsheets.com/ 'creates a message box 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'create a message box MsgBox Prompt:="Create Excel VBA MsgBox" End Sub
Effects of executing macro example to create MsgBox
The following image illustrates the results of executing the macro example.
#2: Create MsgBox with multiple lines (new line or line break)
VBA code to create MsgBox with multiple lines (new line or line break)
To create a message box with multiple lines (by including a new line or using line breaks) using VBA, use a statement with the following structure:
MsgBox Prompt:=PromptString1 & NewLineCharacter & PromptString2 & ... & NewLineCharacter & PromptString#
Process to create MsgBox with multiple lines (new line or line break)
To create a message box with multiple lines (by including a new line or using line breaks) using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox …).
- Specify the message displayed in the message box as an appropriately concatenated (with the & character) combination of:
- Strings (PromptString1, PromptString2, …, PromptString#); and
- Characters that create a new line or line break (NewLineCharacter).
VBA statement explanation
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with multiple lines (by including a new line or using line breaks) using this statement structure:
- The displayed message is that specified by the Prompt argument.
- The message box contains a single button: OK. For purposes of including other custom button layouts, please refer to the appropriate sections of this Tutorial.
- The value returned by the MsgBox function is vbOK (or 1). For purposes of assigning the value returned by the MsgBox function to a variable, please refer to the appropriate section of this Tutorial.
- Item: Prompt:=PromptString1 & NewLineCharacter & PromptString2 & … & NewLineCharacter & PromptString#.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box.
When you create a message box with multiple lines (by including a new line or using line breaks), you build the string expression assigned to Prompt (PromptString1 & NewLineCharacter & PromptString2 & … & NewLineCharacter & PromptString#) by concatenating as many strings (PromptString1, PromptString2, …, PromptString#) and newline characters (NewLineCharacter) as required.
The maximum length of the string expression assigned to prompt is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters you include.
If you explicitly declare a variable to represent this string expression, you can usually work with the String data type.
- Item: PromptString1, PromptString2, …, PromptString#.
- VBA construct: Strings expressions.
- Description: PromptStrings are the strings (excluding the new line characters) that determine the message displayed in the message box.
If you explicitly declare variables to represent the different PromptStrings, you can usually work with the String data type.
- Item: &.
- VBA construct: Concatenation (&) operator.
- Description: The & operator carries out string concatenation. Therefore, & concatenates the different strings (PromptString1, PromptString2, …, PromptString#) and new line characters (NewLineCharacter) you use to specify the string expression assigned to the Prompt argument.
- Item: NewLineCharacter.
- VBA construct: A character or character combination returning 1 of the following:
- Carriage return.
- Linefeed.
- Carriage return linefeed combination.
- New line (which is platform specific).
- Description: Specify NewLineCharacter using any of the constants or character codes (with the Chr function) listed below.
Constant Equivalent Chr function General Description vbLf Chr(10) Linefeed vbCr Chr(13) Carriage return vbCrLf Chr(13) & Chr(10) Carriage return linefeed combination vbNewLine Chr(13) & Chr(10) in Excel for Windows or Chr(13) in Excel for Mac New line character, which is platform specific
- VBA construct: A character or character combination returning 1 of the following:
Macro example to create MsgBox with multiple lines (new line or line break)
The following macro example creates a message box with a message displayed in multiple lines by adding a new line as follows:
- Line #1: “Create Excel VBA MsgBox”.
- Line #2: “And add a new line”.
Sub MsgBoxNewLine() 'source: https://powerspreadsheets.com/ 'creates a message box with a new line or line break 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'create a message box with a new line or line break MsgBox Prompt:="Create Excel VBA MsgBox" & vbNewLine & "And add a new line" End Sub
Effects of executing macro example to create MsgBox with multiple lines (new line or line break)
The following image illustrates the results of executing the macro example. Notice that, as expected, the message box contains multiple lines.
#3: Create MsgBox with title
VBA code to create MsgBox with title
To create a message box with title using VBA, use a statement with the following structure:
MsgBox Prompt:=PromptString, Title:=TitleString
Process to create MsgBox with title
To create a message box with title using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox …).
- Specify the message displayed in the message box (Prompt:=PromptString).
- Specify the message box title (Title:=TitleString).
VBA statement explanation
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with title using this statement structure:
- The displayed message is PromptString.
- The message box contains a single button: OK. For purposes of including other custom button layouts, please refer to the appropriate sections of this Tutorial.
- The value returned by the MsgBox function is vbOK (or 1). For purposes of assigning the value returned by the MsgBox function to a variable, please refer to the appropriate section of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Title:=TitleString.
- VBA construct: Title argument of the MsgBox function and string expression.
- Description: Use the Title argument of the MsgBox function to specify the title displayed in the title bar of the message box. If you omit the Title argument, the title displayed in the title bar of the message box is “Microsoft Excel”.
You generally specify TitleString as a string expression. If you explicitly declare a variable to represent TitleString, you can usually work with the String data type.
Macro example to create MsgBox with title
The following macro example creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- The title “Add title to MsgBox.
Sub MsgBoxTitle() 'source: https://powerspreadsheets.com/ 'creates a message box with a title 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'create a message box with a title MsgBox Prompt:="Create Excel VBA MsgBox", Title:="Add title to MsgBox" End Sub
Effects of executing macro example to create MsgBox with title
The following image illustrates the results of executing the macro example. Notice that, as expected, the message box contains a custom title (Add title to MsgBox).
#4: Create MsgBox that returns value based on user input and assigns value to a variable
VBA code to create MsgBox that returns value based on user input and assigns value to a variable
To create a message box that:
- Returns a value based on the user’s input; and
- Assigns that value to a variable;
with VBA, use a statement with the following structure:
Variable = MsgBox(Prompt:=PromptString, Buttons:=ButtonsExpression)
Process to create MsgBox that returns value based on user input and assigns value to a variable
To create a message box that:
- Returns a value based on the user’s input; and
- Assigns that value to a variable;
with VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox(…)).
- Specify the buttons to be displayed in the message box (Buttons:=ButtonsExpression).
- Assign the value returned by the MsgBox function to a variable (Variable = MsgBox(…)).
VBA statement explanation
- Item: Variable.
- VBA construct: Variable.
- Description: Variable you want to hold the value returned by the MsgBox function.
If you explicitly declare Variable, you can usually work with the Integer data type.
- Item: =.
- VBA construct: Assignment (=) operator.
- Description: The = operator assigns the Integer value returned by the MsgBox function to Variable.
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box that returns a value based on user input (and assigns the value to a variable) using this statement structure:
- The displayed message is PromptString.
- The message box contains the buttons specified by ButtonsExpression. For purposes of working with the main custom button layouts, please refer to the appropriate sections of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=ButtonsExpression.
- VBA construct: Buttons argument of the MsgBox function.
- Description: Use the Buttons argument of the MsgBox function to specify the following:
- Number and type of buttons displayed in the message box.
- Icon style for the message box.
- Default button in the message box.
- Modality of the message box.
For these purposes, you can generally specify ButtonsExpression as a sum of the following 4 groups of values or built-in constants:
- Values or built-in constants that specify the number and type of buttons displayed in the message box, as follows:
Built-in constant Value Description vbOKOnly 0 Message box with only OK button vbOKCancel 1 Message box with OK and Cancel buttons vbAbortRetryIgnore 2 Message box with Abort, Retry and Ignore buttons vbYesNoCancel 3 Message box with Yes, No and Cancel buttons vbYesNo 4 Message box with Yes and No buttons vbRetryCancel 5 Message box with Retry and Cancel buttons For purposes of working with these different custom button layouts, please refer to the appropriate sections of this Tutorial.
- Values or built-in constants that specify the icon style of the message box, as follows:
Built-in constant Value Description vbCritical 16 Message box with Critical Message icon vbQuestion 32 Message box with Warning Query icon vbExclamation 48 Message box with Warning Message icon vbInformation 64 Message box with Information Message icon For purposes of working with these different icon styles, please refer to the appropriate sections of this Tutorial.
- Values or built-in constants that specify the default button in the message box, as follows:
Built-in constant Value Description vbDefaultButton1 0 Message box where first button is default button vbDefaultButton2 256 Message box where second button is default button vbDefaultButton3 512 Message box where third button is default button vbDefaultButton4 768 Message box where fourth button is default button For purposes of working with these different custom default button options, please refer to the appropriate sections of this Tutorial.
- Values or built-in constants that specify the modality of the message box, as follows:
Built-in constant Value Description vbApplicationModal 0 Application modal message box vbSystemModal 4096 System modal message box For purposes of working with this different modality options, please refer to the appropriate sections of this Tutorial.
When specifying ButtonsExpression:
- Specify ButtonsExpression as a sum of the applicable values or built-in constants.
- Omit the values from the groups you don’t specify.
- Use a maximum of 1 value from each of these 4 groups.
- In addition to the values and built-in constants I list above, the Buttons argument accepts the following 4 settings:
Built-in constant Value Description vbMsgBoxHelpButton 16384 Message box with an additional Help button. The MsgBox function also accepts a (optional) helpfile and context arguments that specify the applicable Help file and Help context number.
Clicking on the Help button results in the applicable help being provided. The MsgBox function only returns a value when the user clicks 1 of the other buttons in the message box.
vbMsgBoxSetForeground 65536 Message box is the foreground window vbMsgBoxRight 524288 Text within the message box is aligned to the right vbMsgBoxRtlReading 1048576 Text within the message box is displayed as right-to-left reading on Hebrew and Arabic systems
The default value of the Buttons argument is 0. Therefore, if you omit specifying the Buttons argument, the result is an Application modal message box with a single button (OK), which is also the default button, and no special icon style.
Macro example to create MsgBox that returns value based on user input and assigns value to a variable
The following macro example does the following:
- Creates a message box that returns a value based on the user’s input.
- Assigns this value to a variable (myVariable = MsgBox(…)).
- Creates a second message box that displays the value held by variable.
The message box has the following characteristics:
- Displays the message “Create Excel VBA MsgBox”.
- Has 2 buttons: Yes and No (vbYesNo). The second button (vbDefaultButton2) is the default.
- Displays an Information Message icon (vbInformation).
- Is System modal (vbSystemModal).
Sub MsgBoxVariable() 'source: https://powerspreadsheets.com/ '(1) creates a message box that returns a value, and (2) assigns value to a variable 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'declare variable to hold value returned by message box Dim myVariable As Integer '(1) create a message box that returns a value, and (2) assign this value to a variable myVariable = MsgBox(Prompt:="Create Excel VBA MsgBox", Buttons:=vbYesNo + vbInformation + vbDefaultButton2 + vbSystemModal) 'display message box with value held by variable MsgBox myVariable End Sub
Effects of executing macro example to create MsgBox that returns value based on user input and assigns value to a variable
The following image illustrates the results of executing the macro example. Notice that, as expected, the macro displays a second message box with the value returned by the MsgBox function and held by the variable.
#5: Create MsgBox with OK button
VBA code to create MsgBox with OK button
To create a message box with an OK button using VBA, use a statement with the following structure:
MsgBox Prompt:=PromptString, Buttons:=vbOKOnly
Process to create MsgBox with OK button
To create a message box with an OK button using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox …).
- Specify that the message box should display a single(OK) button (Buttons:=vbOKOnly).
VBA statement explanation
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with OK button using this statement structure:
- The displayed message is PromptString.
- The message box contains a single button: OK.
- The value returned by the MsgBox function is vbOK (or 1). For purposes of assigning the value returned by the MsgBox function to a variable, please refer to the appropriate section of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbOKOnly.
- VBA construct: Buttons argument of the MsgBox function and vbOKOnly built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbOKOnly (or 0) to explicitly specify that the message box has a single OK button.
The default value of the Buttons argument is, anyway, 0. Therefore, if you omit specifying the Buttons argument, the result is also an Application modal message box with a single button (OK), which is also the default button, and no special icon style.
Macro example to create MsgBox with OK button
The following macro example creates a message box with the message “Create Excel VBA MsgBox” and a single (OK) button (vbOKOnly).
Sub MsgBoxCustomButtonsOk() 'source: https://powerspreadsheets.com/ 'creates a message box with an OK button 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'create message box with OK button MsgBox Prompt:="Create Excel VBA MsgBox", Buttons:=vbOKOnly End Sub
Effects of executing macro example to create MsgBox with OK button
The following image illustrates the results of executing the macro example. Notice that, as expected, the message box contains a single (OK) button.
#6: Create MsgBox with OK and Cancel buttons
VBA code to create MsgBox with OK and Cancel buttons
To create a message box with OK and Cancel buttons using VBA, use a statement with the following structure:
OkCancelVariable = MsgBox(Prompt:=PromptString, Buttons:=vbOKCancel)
Process to create MsgBox with OK and Cancel buttons
To create a message box with OK and Cancel buttons using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox(…)).
- Specify that the message box should display OK and Cancel buttons (Buttons:=vbOKCancel).
- Assign the value returned by the MsgBox function to a variable (OkCancelVariable = MsgBox(…)).
VBA statement explanation
- Item: OkCancelVariable.
- VBA construct: Variable.
- Description: Variable you want to hold the value returned by the MsgBox function.
If you explicitly declare OkCancelVariable, you can usually work with the Integer data type.
- Item: =.
- VBA construct: Assignment (=) operator.
- Description: The = operator assigns the Integer value returned by the MsgBox function to OkCancelVariable.
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with OK and Cancel buttons using this statement structure:
- The displayed message is PromptString.
- The message box contains 2 buttons: OK and Cancel.
- The value returned by the MsgBox function is 1 of the following:
Button clicked by user Built-in constant Value OK vbOK 1 Cancel vbCancel 2
If the user presses the Esc key, the MsgBox function returns vbCancel (or 2). In other words, pressing the Esc key is the equivalent to clicking the Cancel button.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbOKCancel.
- VBA construct: Buttons argument of the MsgBox function and vbOKCancel built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbOKCancel (or 1) to specify that the message box has OK and Cancel buttons.
Macro example to create MsgBox with OK and Cancel buttons
The following macro example does the following:
- Creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- OK and Cancel buttons (vbOKCancel).
- Assigns the value returned by the MsgBox function to a variable (myOkCancelMsgBoxValue).
- Checks which value was clicked by the user:
- If the user clicks the OK button (If myOkCancelMsgBoxValue = vbOK), the macro creates a message box with the message “You clicked OK on the message box”.
- If the user clicks the Cancel button (ElseIf myOkCancelMsgBoxValue = vbCancel), the macro creates a message box with the message “You clicked Cancel on the message box”.
Sub MsgBoxCustomButtonsOkCancel() 'source: https://powerspreadsheets.com/ '(1) creates a message box with OK and Cancel buttons, and (2) executes certain statements depending on clicked button 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'declare variable to hold value returned by message box Dim myOkCancelMsgBoxValue As Integer '(1) create a message box with OK and Cancel buttons, and (2) assign value returned by message box to a variable myOkCancelMsgBoxValue = MsgBox(Prompt:="Create Excel VBA MsgBox", Buttons:=vbOKCancel) '(1) check which button was clicked (OK or Cancel), and (2) execute appropriate statements If myOkCancelMsgBoxValue = vbOK Then 'display message box confirming that OK button was clicked MsgBox "You clicked OK on the message box" ElseIf myOkCancelMsgBoxValue = vbCancel Then 'display message box confirming that Cancel button was clicked MsgBox "You clicked Cancel on the message box" End If End Sub
Effects of executing macro example to create MsgBox with OK and Cancel buttons
The following image illustrates the results of executing the macro example. Notice that, as expected, the macro displays a second message box whose message depends on the clicked button (OK or Cancel).
#7: Create MsgBox with Yes and No buttons
VBA code to create MsgBox with Yes and No buttons
To create a message box with Yes and No buttons using VBA, use a statement with the following structure:
YesNoVariable = MsgBox(Prompt:=PromptString, Buttons:=vbYesNo)
Process to create MsgBox with Yes and No buttons
To create a message box with Yes and No buttons using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox(…)).
- Specify that the message box should display Yes and No buttons (Buttons:=vbYesNo).
- Assign the value returned by the MsgBox function to a variable (YesNoVariable = MsgBox(…)).
VBA statement explanation
- Item: YesNoVariable.
- VBA construct: Variable.
- Description: Variable you want to hold the value returned by the MsgBox function.
If you explicitly declare YesNoVariable, you can usually work with the Integer data type.
- Item: =.
- VBA construct: Assignment (=) operator.
- Description: The = operator assigns the Integer value returned by the MsgBox function to YesNoVariable.
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with Yes and No buttons using this statement structure:
- The displayed message is PromptString.
- The message box contains 2 buttons: Yes and No.
- The value returned by the MsgBox function is 1 of the following:
Button clicked by user Built-in constant Value Yes vbYes 6 No vbNo 7
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbYesNo.
- VBA construct: Buttons argument of the MsgBox function and vbYesNo built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbYesNo (or 4) to specify that the message box has Yes and No buttons.
Macro example to create MsgBox with Yes and No buttons
The following macro example does the following:
- Creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- Yes and No buttons (vbYesNo).
- Assigns the value returned by the MsgBox function to a variable (myYesNoMsgBoxValue).
- Checks which value was clicked by the user:
- If the user clicks the Yes button (If myYesNoMsgBoxValue = vbYes), the macro creates a message box with the message “You clicked Yes on the message box”.
- If the user clicks the No button (ElseIf myYesNoMsgBoxValue = vbNo), the macro creates a message box with the message “You clicked No on the message box”.
Sub MsgBoxCustomButtonsYesNo() 'source: https://powerspreadsheets.com/ '(1) creates a message box with Yes and No buttons, and (2) executes certain statements depending on clicked button 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'declare variable to hold value returned by message box Dim myYesNoMsgBoxValue As Integer '(1) create a message box with Yes and No buttons, and (2) assign value returned by message box to a variable myYesNoMsgBoxValue = MsgBox(Prompt:="Create Excel VBA MsgBox", Buttons:=vbYesNo) '(1) check which button was clicked (Yes or No), and (2) execute appropriate statements If myYesNoMsgBoxValue = vbYes Then 'display message box confirming that Yes button was clicked MsgBox "You clicked Yes on the message box" ElseIf myYesNoMsgBoxValue = vbNo Then 'display message box confirming that No button was clicked MsgBox "You clicked No on the message box" End If End Sub
Effects of executing macro example to create MsgBox with Yes and No buttons
The following image illustrates the results of executing the macro example. Notice that, as expected, the macro displays a second message box whose message depends on the clicked button (Yes or No).
#8: Create MsgBox with Yes, No and Cancel buttons
VBA code to create MsgBox with Yes, No and Cancel buttons
To create a message box with Yes, No and Cancel buttons using VBA, use a statement with the following structure:
YesNoCancelVariable = MsgBox(Prompt:=PromptString, Buttons:=vbYesNoCancel)
Process to create MsgBox with Yes, No and Cancel buttons
To create a message box with Yes, No and Cancel buttons using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox(…)).
- Specify that the message box should display Yes, No and Cancel buttons (Buttons:=vbYesNoCancel).
- Assign the value returned by the MsgBox function to a variable (YesNoCancelVariable = MsgBox(…)).
VBA statement explanation
- Item: YesNoCancelVariable.
- VBA construct: Variable.
- Description: Variable you want to hold the value returned by the MsgBox function.
If you explicitly declare YesNoCancelVariable, you can usually work with the Integer data type.
- Item: =.
- VBA construct: Assignment (=) operator.
- Description: The = operator assigns the Integer value returned by the MsgBox function to YesNoCancelVariable.
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with Yes, No and Cancel buttons using this statement structure:
- The displayed message is PromptString.
- The message box contains 3 buttons: Yes, No and Cancel.
- The value returned by the MsgBox function is 1 of the following:
Button clicked by user Built-in constant Value Cancel vbCancel 2 Yes vbYes 6 No vbNo 7 If the user presses the Esc key, the MsgBox function returns vbCancel (or 2). In other words, pressing the Esc key is the equivalent to clicking the Cancel button.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbYesNoCancel.
- VBA construct: Buttons argument of the MsgBox function and vbYesNoCancel built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbYesNoCancel (or 3) to specify that the message box has Yes, No and Cancel buttons.
Macro example to create MsgBox with Yes, No and Cancel buttons
The following macro example does the following:
- Creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- Yes, No and Cancel buttons (vbYesNoCancel).
- Assigns the value returned by the MsgBox function to a variable (myYesNoCancelMsgBoxValue).
- Checks which value was clicked by the user:
- If the user clicks the Yes button (Case vbYes), the macro creates a message box with the message “You clicked Yes on the message box”.
- If the user clicks the No button (Case vbNo), the macro creates a message box with the message “You clicked No on the message box”.
- If the user clicks the Cancel button (Case vbCancel), the macro creates a message box with the message “You clicked Cancel on the message box”.
Sub MsgBoxCustomButtonsYesNoCancel() 'source: https://powerspreadsheets.com/ '(1) creates a message box with Yes, No and Cancel buttons, and (2) executes certain statements depending on clicked button 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'declare variable to hold value returned by message box Dim myYesNoCancelMsgBoxValue As Integer '(1) create a message box with Yes, No and Cancel buttons, and (2) assign value returned by message box to a variable myYesNoCancelMsgBoxValue = MsgBox(Prompt:="Create Excel VBA MsgBox", Buttons:=vbYesNoCancel) '(1) check which button was clicked (Yes, No or Cancel), and (2) execute appropriate statements Select Case myYesNoCancelMsgBoxValue 'display message box confirming that Yes button was clicked Case vbYes: MsgBox "You clicked Yes on the message box" 'display message box confirming that No button was clicked Case vbNo: MsgBox "You clicked No on the message box" 'display message box confirming that Cancel button was clicked Case vbCancel: MsgBox "You clicked Cancel on the message box" End Select End Sub
Effects of executing macro example to create MsgBox with Yes, No and Cancel buttons
The following image illustrates the results of executing the macro example. Notice that, as expected, the macro displays a second message box whose message depends on the clicked button (Yes, No or Cancel).
#9: Create MsgBox with Retry and Cancel buttons
VBA code to create MsgBox with Retry and Cancel buttons
To create a message box with Retry and Cancel buttons using VBA, use a statement with the following structure:
RetryCancelVariable = MsgBox(Prompt:=PromptString, Buttons:=vbRetryCancel)
Process to create MsgBox with Retry and Cancel buttons
To create a message box with Retry and Cancel buttons using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox(…)).
- Specify that the message box should display Retry and Cancel buttons (Buttons:=vbRetryCancel).
- Assign the value returned by the MsgBox function to a variable (RetryCancelVariable = MsgBox(…)).
VBA statement explanation
- Item: RetryCancelVariable.
- VBA construct: Variable.
- Description: Variable you want to hold the value returned by the MsgBox function.
If you explicitly declare RetryCancelVariable, you can usually work with the Integer data type.
- Item: =.
- VBA construct: Assignment (=) operator.
- Description: The = operator assigns the Integer value returned by the MsgBox function to RetryCancelVariable.
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with Retry and Cancel buttons using this statement structure:
- The displayed message is PromptString.
- The message box contains 2 buttons: Retry and Cancel.
- The value returned by the MsgBox function is 1 of the following:
Button clicked by user Built-in constant Value Cancel vbCancel 2 Retry vbRetry 4
If the user presses the Esc key, the MsgBox function returns vbCancel (or 2). In other words, pressing the Esc key is the equivalent to clicking the Cancel button.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbRetryCancel.
- VBA construct: Buttons argument of the MsgBox function and vbRetryCancel built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbRetryCancel (or 5) to specify that the message box has Retry and Cancel buttons.
Macro example to create MsgBox with Retry and Cancel buttons
The following macro example does the following:
- Creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- Retry and Cancel buttons (vbRetryCancel).
- Assigns the value returned by the MsgBox function to a variable (myRetryCancelMsgBoxValue).
- Checks which value was clicked by the user:
- If the user clicks the Retry button (If myRetryCancelMsgBoxValue = vbRetry), the macro creates a message box with the message “You clicked Retry on the message box”.
- If the user clicks the Cancel button (ElseIf myRetryCancelMsgBoxValue = vbCancel), the macro creates a message box with the message “You clicked Cancel on the message box”.
Sub MsgBoxCustomButtonsRetryCancel() 'source: https://powerspreadsheets.com/ '(1) creates a message box with Retry and Cancel buttons, and (2) executes certain statements depending on clicked button 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'declare variable to hold value returned by message box Dim myRetryCancelMsgBoxValue As Integer '(1) create a message box with Retry and Cancel buttons, and (2) assign value returned by message box to a variable myRetryCancelMsgBoxValue = MsgBox(Prompt:="Create Excel VBA MsgBox", Buttons:=vbRetryCancel) '(1) check which button was clicked (Retry or Cancel), and (2) execute appropriate statements If myRetryCancelMsgBoxValue = vbRetry Then 'display message box confirming that Retry button was clicked MsgBox "You clicked Retry on the message box" ElseIf myRetryCancelMsgBoxValue = vbCancel Then 'display message box confirming that Cancel button was clicked MsgBox "You clicked Cancel on the message box" End If End Sub
Effects of executing macro example to create MsgBox with Retry and Cancel buttons
The following image illustrates the results of executing the macro example. Notice that, as expected, the macro displays a second message box whose message depends on the clicked button (Retry or Cancel).
#10: Create MsgBox with Abort, Retry and Ignore buttons
VBA code to create MsgBox with Abort, Retry and Ignore buttons
To create a message box with Abort, Retry and Ignore buttons using VBA, use a statement with the following structure:
AbortRetryIgnoreVariable = MsgBox(Prompt:=PromptString, Buttons:=vbAbortRetryIgnore)
Process to create MsgBox with Abort, Retry and Ignore buttons
To create a message box with Abort, Retry and Ignore buttons using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox(…)).
- Specify that the message box should display Abort, Retry and Ignore buttons (Buttons:=vbAbortRetryIgnore).
- Assign the value returned by the MsgBox function to a variable (AbortRetryIgnoreVariable = MsgBox(…)).
VBA statement explanation
- Item: AbortRetryIgnoreVariable.
- VBA construct: Variable.
- Description: Variable you want to hold the value returned by the MsgBox function.
If you explicitly declare AbortRetryIgnoreVariable, you can usually work with the Integer data type.
- Item: =.
- VBA construct: Assignment (=) operator.
- Description: The = operator assigns the Integer value returned by the MsgBox function to AbortRetryIgnoreVariable.
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with Abort, Retry and Ignore buttons using this statement structure:
- The displayed message is PromptString.
- The message box contains 3 buttons: Abort, Retry and Ignore.
- The value returned by the MsgBox function is 1 of the following:
Button clicked by user Built-in constant Value Abort vbAbort 3 Retry vbRetry 4 Ignore vbIgnore 5
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbAbortRetryIgnore.
- VBA construct: Buttons argument of the MsgBox function and vbAbortRetryIgnore built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbAbortRetryIgnore (or 2) to specify that the message box has Abort, Retry and Ignore buttons.
Macro example to create MsgBox with Abort, Retry and Ignore buttons
The following macro example does the following:
- Creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- Abort, Retry and Ignore buttons (vbAbortRetryIgnore).
- Assigns the value returned by the MsgBox function to a variable (myAbortRetryIgnoreMsgBoxValue).
- Checks which value was clicked by the user:
- If the user clicks the Abort button (Case vbAbort), the macro creates a message box with the message “You clicked Abort on the message box”.
- If the user clicks the Retry button (Case vbRetry), the macro creates a message box with the message “You clicked Retry on the message box”.
- If the user clicks the Ignore button (Case vbIgnore), the macro creates a message box with the message “You clicked Ignore on the message box”.
Sub MsgBoxCustomButtonsAbortRetryIgnore() 'source: https://powerspreadsheets.com/ '(1) creates a message box with Abort, Retry and Ignore buttons, and (2) executes certain statements depending on clicked button 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'declare variable to hold value returned by message box Dim myAbortRetryIgnoreMsgBoxValue As Integer '(1) create a message box with Yes, No and Cancel buttons, and (2) assign value returned by message box to a variable myAbortRetryIgnoreMsgBoxValue = MsgBox(Prompt:="Create Excel VBA MsgBox", Buttons:=vbAbortRetryIgnore) '(1) check which button was clicked (Abort, Retry or Ignore), and (2) execute appropriate statements Select Case myAbortRetryIgnoreMsgBoxValue 'display message box confirming that Abort button was clicked Case vbAbort: MsgBox "You clicked Abort on the message box" 'display message box confirming that Retry button was clicked Case vbRetry: MsgBox "You clicked Retry on the message box" 'display message box confirming that Ignore button was clicked Case vbIgnore: MsgBox "You clicked Ignore on the message box" End Select End Sub
Effects of executing macro example to create MsgBox with Abort, Retry and Ignore buttons
The following image illustrates the results of executing the macro example. Notice that, as expected, the macro displays a second message box whose message depends on the clicked button (Abort, Retry or Ignore).
#11: Create MsgBox with critical style
VBA code to create MsgBox with critical style
To create a message box with the critical icon style using VBA, use a statement with the following structure:
MsgBox Prompt:=PromptString, Buttons:=vbCritical
Process to create MsgBox with critical style
To create a message box with the critical icon style using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox …).
- Specify that the message box should use the critical icon style (Buttons:=vbCritical).
VBA statement explanation
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with a critical icon style using this statement structure:
- The displayed message is PromptString.
- The message box contains a single button: OK. For purposes of including other custom button layouts, please refer to the appropriate sections of this Tutorial.
- The value returned by the MsgBox function is vbOK (or 1). For purposes of assigning the value returned by the MsgBox function to a variable, please refer to the appropriate section of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbCritical.
- VBA construct: Buttons argument of the MsgBox function and vbCritical built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbCritical (or 16) to specify that the message box uses the critical icon style and, therefore, displays a Critical Message icon.
Macro example to create MsgBox with critical style
The following macro example creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- The critical message icon style (vbCritical), which results in the Critical Message icon being displayed.
Sub MsgBoxCriticalStyle() 'source: https://powerspreadsheets.com/ 'creates a message box with a critical message icon style 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'create a message box with a critical message icon style MsgBox Prompt:="Create Excel VBA MsgBox", Buttons:=vbCritical End Sub
Effects of executing macro example to create MsgBox with critical style
The following image illustrates the results of executing the macro example. Notice that, as expected, the message box uses the critical message icon style.
#12: Create MsgBox with question style
VBA code to create MsgBox with question style
To create a message box with the question icon style using VBA, use a statement with the following structure:
MsgBox Prompt:=PromptString, Buttons:=vbQuestion
Process to create MsgBox with question style
To create a message box with the question icon style using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox …).
- Specify that the message box should use the question icon style (Buttons:=vbQuestion).
VBA statement explanation
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with the question icon style using this statement structure:
- The displayed message is PromptString.
- The message box contains a single button: OK. For purposes of including other custom button layouts, please refer to the appropriate sections of this Tutorial.
- The value returned by the MsgBox function is vbOK (or 1). For purposes of assigning the value returned by the MsgBox function to a variable, please refer to the appropriate section of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbQuestion.
- VBA construct: Buttons argument of the MsgBox function and vbQuestion built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbQuestion (or 32) to specify that the message box uses the question icon style and, therefore, displays a Warning Query icon.
Macro example to create MsgBox with question style
The following macro example creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- The question icon style (vbQuestion), which results in the Warning Query icon being displayed.
Sub MsgBoxQuestionStyle() 'source: https://powerspreadsheets.com/ 'creates a message box with the question icon style 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'create a message box with the question icon style MsgBox Prompt:="Create Excel VBA MsgBox", Buttons:=vbQuestion End Sub
Effects of executing macro example to create MsgBox with question style
The following image illustrates the results of executing the macro example. Notice that, as expected, the message box uses the question icon style.
#13: Create MsgBox with exclamation style
VBA code to create MsgBox with exclamation style
To create a message box with the exclamation icon style using VBA, use a statement with the following structure:
MsgBox Prompt:=PromptString, Buttons:=vbExclamation
Process to create MsgBox with exclamation style
To create a message box with the exclamation icon style using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox …).
- Specify that the message box should use the exclamation icon style (Buttons:=vbExclamation).
VBA statement explanation
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with an exclamation icon style using this statement structure:
- The displayed message is PromptString.
- The message box contains a single button: OK. For purposes of including other custom button layouts, please refer to the appropriate sections of this Tutorial.
- The value returned by the MsgBox function is vbOK (or 1). For purposes of assigning the value returned by the MsgBox function to a variable, please refer to the appropriate section of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbExclamation.
- VBA construct: Buttons argument of the MsgBox function and vbExclamation built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbExclamation (or 48) to specify that the message box uses the exclamation icon style and, therefore, displays a Warning Message icon.
Macro example to create MsgBox with exclamation style
The following macro example creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- The exclamation icon style (vbExclamation), which results in the Warning Message icon being displayed.
Sub MsgBoxExclamationStyle() 'source: https://powerspreadsheets.com/ 'creates a message box with a warning message icon style 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'create a message box with an exclamation icon style MsgBox Prompt:="Create Excel VBA MsgBox", Buttons:=vbExclamation End Sub
Effects of executing macro example to create MsgBox with exclamation style
The following image illustrates the results of executing the macro example. Notice that, as expected, the message box uses the exclamation icon style.
#14: Create MsgBox with information style
VBA code to create MsgBox with information style
To create a message box with the information icon style using VBA, use a statement with the following structure:
MsgBox Prompt:=PromptString, Buttons:=vbInformation
Process to create MsgBox with information style
To create a message box with the information icon style using VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox …).
- Specify that the message box should use the information icon style (Buttons:=vbInformation).
VBA statement explanation
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box with an information icon style using this statement structure:
- The displayed message is PromptString.
- The message box contains a single button: OK. For purposes of including other custom button layouts, please refer to the appropriate sections of this Tutorial.
- The value returned by the MsgBox function is vbOK (or 1). For purposes of assigning the value returned by the MsgBox function to a variable, please refer to the appropriate section of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbInformation.
- VBA construct: Buttons argument of the MsgBox function and vbInformation built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbInformation (or 64) to specify that the message box uses the information icon style and, therefore, displays an Information Message icon.
Macro example to create MsgBox with information style
The following macro example creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- The information icon style (vbInformation), which results in the Information Message icon being displayed.
Sub MsgBoxInformationStyle() 'source: https://powerspreadsheets.com/ 'creates a message box with an information message icon style 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'create a message box with an information message icon style MsgBox Prompt:="Create Excel VBA MsgBox", Buttons:=vbInformation End Sub
Effects of executing macro example to create MsgBox with information style
The following image illustrates the results of executing the macro example. Notice that, as expected, the message box uses the information message icon style.
#15: Create MsgBox where first button is default
VBA code to create MsgBox where first button is default
To create a message box where the first button is the default with VBA, use a statement with the following structure:
CustomButtons1Variable = MsgBox(Prompt:=PromptString, Buttons:=ButtonsExpression1 + vbDefaultButton1)
Process to create MsgBox where first button is default
To create a message box where the first button is the default with VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox(…)).
- Specify the buttons to be displayed in the message box and, explicitly, specify that the first button is the default one (Buttons:=ButtonsExpression1 + vbDefaultButton1).
- Assign the value returned by the MsgBox function to a variable (CustomButtons1Variable = MsgBox(…)).
VBA statement explanation
- Item: CustomButtons1Variable.
- VBA construct: Variable.
- Description: Variable you want to hold the value returned by the MsgBox function.
If you explicitly declare CustomButtons1Variable, you can usually work with the Integer data type.
- Item: =.
- VBA construct: Assignment (=) operator.
- Description: The = operator assigns the Integer value returned by the MsgBox function to CustomButtons1Variable.
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box where the first button is the default using this statement structure:
- The displayed message is PromptString.
- The message box contains the buttons specified by ButtonsExpression1. For purposes of working with the main custom button layouts, please refer to the appropriate sections of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=ButtonsExpression1 + vbDefaultButton1.
- VBA construct: Buttons argument of the MsgBox function.
- Description: Use the Buttons argument of the MsgBox function to specify the following:
- Number and type of buttons displayed in the message box.
- Icon style for the message box.
- That the first button in the message box is the default.
- Modality of the message box.
- Item: ButtonsExpression1.
- VBA construct: Numeric expression partially specifying the value assigned to the Buttons argument.
- Description: Specify ButtonsExpression1 as a sum of the following 3 groups of values or built-in constants:
- Values or built-in constants that specify the number and type of buttons displayed in the message box, as follows:
Built-in constant Value Description vbOKOnly 0 Message box with only OK button vbOKCancel 1 Message box with OK and Cancel buttons vbAbortRetryIgnore 2 Message box with Abort, Retry and Ignore buttons vbYesNoCancel 3 Message box with Yes, No and Cancel buttons vbYesNo 4 Message box with Yes and No buttons vbRetryCancel 5 Message box with Retry and Cancel buttons For purposes of working with these different custom button layouts, please refer to the appropriate sections of this Tutorial.
- Values or built-in constants that specify the icon style of the message box, as follows:
Built-in constant Value Description vbCritical 16 Message box with Critical Message icon vbQuestion 32 Message box with Warning Query icon vbExclamation 48 Message box with Warning Message icon vbInformation 64 Message box with Information Message icon For purposes of working with these different icon styles, please refer to the appropriate sections of this Tutorial.
- Values or built-in constants that specify the modality of the message box, as follows:
Built-in constant Value Description vbApplicationModal 0 Application modal message box vbSystemModal 4096 System modal message box For purposes of working with this different modality options, please refer to the appropriate sections of this Tutorial.
When specifying ButtonsExpression1:
- Specify ButtonsExpression1 as a sum of the applicable values or built-in constants.
- Omit the values from the groups you don’t specify.
- Use a maximum of 1 value from each of these 3 groups.
- In addition to the values and built-in constants I list above, the Buttons argument accepts the following 4 settings:
Built-in constant Value Description vbMsgBoxHelpButton 16384 Message box with an additional Help button. The MsgBox function also accepts a (optional) helpfile and context arguments that specify the applicable Help file and Help context number.
Clicking on the Help button results in the applicable help being provided. The MsgBox function only returns a value when the user clicks 1 of the other buttons in the message box.
vbMsgBoxSetForeground 65536 Message box is the foreground window vbMsgBoxRight 524288 Text within the message box is aligned to the right vbMsgBoxRtlReading 1048576 Text within the message box is displayed as right-to-left reading on Hebrew and Arabic systems
- Values or built-in constants that specify the number and type of buttons displayed in the message box, as follows:
- Item: vbDefaultButton1.
- VBA construct: vbDefaultButton1 built-in constant.
- Description: Include vbDefaultButton1 (or 0) in the numeric expression assigned to the Buttons argument to specify that the first button of the message box is the default button.
The default value of the Buttons argument is, anyway, 0. Therefore, if you omit specifying the Buttons argument, the result is an Application modal message box with a single button (OK), which is also the default button, and no special icon style.
Macro example to create MsgBox where first button is default
The following macro example does the following:
- Creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- Yes and No buttons (vbYesNo). The first button (vbDefaultButton1) is explicitly set as the default.
- Assigns the value returned by the MsgBox function to a variable (myCustomButtonsDefault1MsgBoxValue).
- Checks which value was clicked by the user:
- If the user clicks the Yes button (If myCustomButtonsDefault1MsgBoxValue = vbYes), the macro creates a message box with the message “You clicked Yes on the message box”.
- If the user clicks the No button (ElseIf myCustomButtonsDefault1MsgBoxValue = vbNo), the macro creates a message box with the message “You clicked No on the message box”.
Sub MsgBoxCustomButtonsDefault1() 'source: https://powerspreadsheets.com/ '(1) creates a message box with Yes and No buttons, (2) specifies that first button (Yes) is default, and (3) executes certain statements depending on clicked button 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'declare variable to hold value returned by message box Dim myCustomButtonsDefault1MsgBoxValue As Integer '(1) create a message box with Yes and No buttons where the first button (Yes) is the default, and (2) assign value returned by message box to a variable myCustomButtonsDefault1MsgBoxValue = MsgBox(Prompt:="Create Excel VBA MsgBox", Buttons:=vbYesNo + vbDefaultButton1) '(1) check which button was clicked (Yes or No), and (2) execute appropriate statements If myCustomButtonsDefault1MsgBoxValue = vbYes Then 'display message box confirming that Yes button was clicked MsgBox "You clicked Yes on the message box" ElseIf myCustomButtonsDefault1MsgBoxValue = vbNo Then 'display message box confirming that No button was clicked MsgBox "You clicked No on the message box" End If End Sub
Effects of executing macro example to create MsgBox where first button is default
The following image illustrates the results of executing the macro example. Notice that, as expected, the first button in the message box is the default.
#16: Create MsgBox where second button is default
VBA code to create MsgBox where second button is default
To create a message box where the second button is the default with VBA, use a statement with the following structure:
CustomButtons2Variable = MsgBox(Prompt:=PromptString, Buttons:=ButtonsExpression1 + vbDefaultButton2)
Process to create MsgBox where second button is default
To create a message box where the second button is the default with VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox(…)).
- Specify the buttons to be displayed in the message box and, explicitly, specify that the second button is the default one (Buttons:=ButtonsExpression1 + vbDefaultButton2).
- Assign the value returned by the MsgBox function to a variable (CustomButtons2Variable = MsgBox(…)).
VBA statement explanation
- Item: CustomButtons2Variable.
- VBA construct: Variable.
- Description: Variable you want to hold the value returned by the MsgBox function.
If you explicitly declare CustomButtons2Variable, you can usually work with the Integer data type.
- Item: =.
- VBA construct: Assignment (=) operator.
- Description: The = operator assigns the Integer value returned by the MsgBox function to CustomButtons2Variable.
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box where the second button is the default using this statement structure:
- The displayed message is PromptString.
- The message box contains the buttons specified by ButtonsExpression1. For purposes of working with the main custom button layouts, please refer to the appropriate sections of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=ButtonsExpression1 + vbDefaultButton2.
- VBA construct: Buttons argument of the MsgBox function.
- Description: Use the Buttons argument of the MsgBox function to specify the following:
- Number and type of buttons displayed in the message box.
- Icon style for the message box.
- That the second button in the message box is the default.
- Modality of the message box.
- Item: ButtonsExpression1.
- VBA construct: Numeric expression partially specifying the value assigned to the Buttons argument.
- Description: Specify ButtonsExpression1 as a sum of the following 3 groups of values or built-in constants:
- Values or built-in constants that specify the number and type of buttons displayed in the message box, as follows:
Built-in constant Value Description vbOKOnly 0 Message box with only OK button vbOKCancel 1 Message box with OK and Cancel buttons vbAbortRetryIgnore 2 Message box with Abort, Retry and Ignore buttons vbYesNoCancel 3 Message box with Yes, No and Cancel buttons vbYesNo 4 Message box with Yes and No buttons vbRetryCancel 5 Message box with Retry and Cancel buttons Usually, when creating a message box where the second button is the default, you don’t work with vbOKOnly (0). For purposes of working with these different custom button layouts, please refer to the appropriate sections of this Tutorial.
- Values or built-in constants that specify the icon style of the message box, as follows:
Built-in constant Value Description vbCritical 16 Message box with Critical Message icon vbQuestion 32 Message box with Warning Query icon vbExclamation 48 Message box with Warning Message icon vbInformation 64 Message box with Information Message icon For purposes of working with these different icon styles, please refer to the appropriate sections of this Tutorial.
- Values or built-in constants that specify the modality of the message box, as follows:
Built-in constant Value Description vbApplicationModal 0 Application modal message box vbSystemModal 4096 System modal message box For purposes of working with this different modality options, please refer to the appropriate sections of this Tutorial.
When specifying ButtonsExpression1:
- Specify ButtonsExpression1 as a sum of the applicable values or built-in constants.
- Omit the values from the groups you don’t specify.
- Use a maximum of 1 value from each of these 3 groups.
- In addition to the values and built-in constants I list above, the Buttons argument accepts the following 4 settings:
Built-in constant Value Description vbMsgBoxHelpButton 16384 Message box with an additional Help button. The MsgBox function also accepts a (optional) helpfile and context arguments that specify the applicable Help file and Help context number.
Clicking on the Help button results in the applicable help being provided. The MsgBox function only returns a value when the user clicks 1 of the other buttons in the message box.
vbMsgBoxSetForeground 65536 Message box is the foreground window vbMsgBoxRight 524288 Text within the message box is aligned to the right vbMsgBoxRtlReading 1048576 Text within the message box is displayed as right-to-left reading on Hebrew and Arabic systems
- Values or built-in constants that specify the number and type of buttons displayed in the message box, as follows:
- Item: vbDefaultButton2.
- VBA construct: vbDefaultButton2 built-in constant.
- Description: Include vbDefaultButton2 (or 256) in the numeric expression assigned to the Buttons argument to specify that the second button of the message box is the default button.
Macro example to create MsgBox where second button is default
The following macro example does the following:
- Creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- Yes and No buttons (vbYesNo). The second button (vbDefaultButton2) is set as the default.
- Assigns the value returned by the MsgBox function to a variable (myCustomButtonsDefault2MsgBoxValue).
- Checks which value was clicked by the user:
- If the user clicks the Yes button (If myCustomButtonsDefault2MsgBoxValue = vbYes), the macro creates a message box with the message “You clicked Yes on the message box”.
- If the user clicks the No button (ElseIf myCustomButtonsDefault2MsgBoxValue = vbNo), the macro creates a message box with the message “You clicked No on the message box”.
Sub MsgBoxCustomButtonsDefault2() 'source: https://powerspreadsheets.com/ '(1) creates a message box with Yes and No buttons, (2) specifies that second button (No) is default, and (3) executes certain statements depending on clicked button 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'declare variable to hold value returned by message box Dim myCustomButtonsDefault2MsgBoxValue As Integer '(1) create a message box with Yes and No buttons where the second button (No) is the default, and (2) assign value returned by message box to a variable myCustomButtonsDefault2MsgBoxValue = MsgBox(Prompt:="Create Excel VBA MsgBox", Buttons:=vbYesNo + vbDefaultButton2) '(1) check which button was clicked (Yes or No), and (2) execute appropriate statements If myCustomButtonsDefault2MsgBoxValue = vbYes Then 'display message box confirming that Yes button was clicked MsgBox "You clicked Yes on the message box" ElseIf myCustomButtonsDefault2MsgBoxValue = vbNo Then 'display message box confirming that No button was clicked MsgBox "You clicked No on the message box" End If End Sub
Effects of executing macro example to create MsgBox where second button is default
The following image illustrates the results of executing the macro example. Notice that, as expected, the second button in the message box is the default.
#17: Create MsgBox where third button is default
VBA code to create MsgBox where third button is default
To create a message box where the third button is the default with VBA, use a statement with the following structure:
CustomButtons3Variable = MsgBox(Prompt:=PromptString, Buttons:=ButtonsExpression + vbDefaultButton3)
Process to create MsgBox where third button is default
To create a message box where the third button is the default with VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox(…)).
- Specify the buttons to be displayed in the message box and, explicitly, specify that the third button is the default one (Buttons:=ButtonsExpression1 + vbDefaultButton3).
- Assign the value returned by the MsgBox function to a variable (CustomButtons3Variable = MsgBox(…)).
VBA statement explanation
- Item: CustomButtons3Variable.
- VBA construct: Variable.
- Description: Variable you want to hold the value returned by the MsgBox function.
If you explicitly declare CustomButtons3Variable, you can usually work with the Integer data type.
- Item: =.
- VBA construct: Assignment (=) operator.
- Description: The = operator assigns the Integer value returned by the MsgBox function to CustomButtons3Variable.
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a message box where the third button is the default using this statement structure:
- The displayed message is PromptString.
- The message box contains the buttons specified by ButtonsExpression1. For purposes of working with the main custom button layouts, please refer to the appropriate sections of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=ButtonsExpression1 + vbDefaultButton3.
- VBA construct: Buttons argument of the MsgBox function.
- Description: Use the Buttons argument of the MsgBox function to specify the following:
- Number and type of buttons displayed in the message box.
- Icon style for the message box.
- That the third button in the message box is the default.
- Modality of the message box.
- Item: ButtonsExpression1.
- VBA construct: Numeric expression partially specifying the value assigned to the Buttons argument.
- Description: Specify ButtonsExpression1 as a sum of the following 3 groups of values or built-in constants:
- Values or built-in constants that specify the number and type of buttons displayed in the message box, as follows:
Built-in constant Value Description vbOKCancel 1 Message box with OK and Cancel buttons vbAbortRetryIgnore 2 Message box with Abort, Retry and Ignore buttons vbYesNoCancel 3 Message box with Yes, No and Cancel buttons vbYesNo 4 Message box with Yes and No buttons vbRetryCancel 5 Message box with Retry and Cancel buttons Usually, when creating a message box where the third button is the default, you work with either vbAbortRetryIgnore (2) or vbYesNoCancel (3). For purposes of working with these different custom button layouts, please refer to the appropriate sections of this Tutorial.
- Values or built-in constants that specify the icon style of the message box, as follows:
Built-in constant Value Description vbCritical 16 Message box with Critical Message icon vbQuestion 32 Message box with Warning Query icon vbExclamation 48 Message box with Warning Message icon vbInformation 64 Message box with Information Message icon For purposes of working with these different icon styles, please refer to the appropriate sections of this Tutorial.
- Values or built-in constants that specify the modality of the message box, as follows:
Built-in constant Value Description vbApplicationModal 0 Application modal message box vbSystemModal 4096 System modal message box For purposes of working with this different modality options, please refer to the appropriate sections of this Tutorial.
When specifying ButtonsExpression1:
- Specify ButtonsExpression1 as a sum of the applicable values or built-in constants.
- Omit the values from the groups you don’t specify.
- Use a maximum of 1 value from each of these 3 groups.
- In addition to the values and built-in constants I list above, the Buttons argument accepts the following 4 settings:
Built-in constant Value Description vbMsgBoxHelpButton 16384 Message box with an additional Help button. The MsgBox function also accepts a (optional) helpfile and context arguments that specify the applicable Help file and Help context number.
Clicking on the Help button results in the applicable help being provided. The MsgBox function only returns a value when the user clicks 1 of the other buttons in the message box.
vbMsgBoxSetForeground 65536 Message box is the foreground window vbMsgBoxRight 524288 Text within the message box is aligned to the right vbMsgBoxRtlReading 1048576 Text within the message box is displayed as right-to-left reading on Hebrew and Arabic systems
- Values or built-in constants that specify the number and type of buttons displayed in the message box, as follows:
- Item: vbDefaultButton3.
- VBA construct: vbDefaultButton3 built-in constant.
- Description: Include vbDefaultButton3 (or 512) in the numeric expression assigned to the Buttons argument to specify that the third button of the message box is the default button.
Macro example to create MsgBox where third button is default
The following macro example does the following:
- Creates a message box with:
- The message “Create Excel VBA MsgBox”; and
- Yes, No and Cancel buttons (vbYesNoCancel). The third button (vbDefaultButton3) is set as the default.
- Assigns the value returned by the MsgBox function to a variable (myCustomButtonsDefault3MsgBoxValue).
- Checks which value was clicked by the user:
- If the user clicks the Yes button (Case vbYes), the macro creates a message box with the message “You clicked Yes on the message box”.
- If the user clicks the No button (Case vbNo), the macro creates a message box with the message “You clicked No on the message box”.
- If the user clicks the Cancel button (Case vbCancel), the macro creates a message box with the message “You clicked Cancel on the message box”.
Sub MsgBoxCustomButtonsDefault3() 'source: https://powerspreadsheets.com/ '(1) creates a message box with Yes, No and Cancel buttons, (2) specifies that third button (Cancel) is default, and (3) executes certain statements depending on clicked button 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'declare variable to hold value returned by message box Dim myCustomButtonsDefault3MsgBoxValue As Integer '(1) create a message box with Yes, No and Cancel buttons where the third button (Cancel) is the default, and (2) assign value returned by message box to a variable myCustomButtonsDefault3MsgBoxValue = MsgBox(Prompt:="Create Excel VBA MsgBox", Buttons:=vbYesNoCancel + vbDefaultButton3) '(1) check which button was clicked (Yes, No or Cancel), and (2) execute appropriate statements Select Case myCustomButtonsDefault3MsgBoxValue 'display message box confirming that Yes button was clicked Case vbYes: MsgBox "You clicked Yes on the message box" 'display message box confirming that No button was clicked Case vbNo: MsgBox "You clicked No on the message box" 'display message box confirming that Cancel button was clicked Case vbCancel: MsgBox "You clicked Cancel on the message box" End Select End Sub
Effects of executing macro example to create MsgBox where third button is default
The following image illustrates the results of executing the macro example. Notice that, as expected, the third button in the message box is the default.
#18: Create Application modal MsgBox
VBA code to create Application modal MsgBox
To create an Application modal message box with VBA, use a statement with the following structure:
MsgBox Prompt:=PromptString, Buttons:=vbApplicationModal
Process to create Application modal MsgBox
To create an Application modal message box with VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox …).
- Specify that the message box should be Application modal (Buttons:=vbApplicationModal).
VBA statement explanation
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create an Application modal message box using this statement structure:
- The displayed message is PromptString.
- The message box contains a single button: OK. For purposes of including other custom button layouts, please refer to the appropriate sections of this Tutorial.
- The value returned by the MsgBox function is vbOK (or 1). For purposes of assigning the value returned by the MsgBox function to a variable, please refer to the appropriate section of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbApplicationModal.
- VBA construct: Buttons argument of the MsgBox function and vbApplicationModal built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbApplicationModal (or 0) to specify that the message box is Application modal. When a message box is Application modal, the user must respond to the message box prior to working again with the Excel Application.
The default value of the Buttons argument is, anyway, 0. Therefore, if you omit specifying the Buttons argument, the result is also an Application modal message box with a single button (OK), which is also the default button, and no special icon style.
Macro example to create Application modal MsgBox
The following macro example creates an Application modal (vbApplicationModal) message box with the message “Create Excel VBA MsgBox”.
Sub MsgBoxApplicationModal() 'source: https://powerspreadsheets.com/ 'creates an Application modal message box 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'create an Application modal message box MsgBox Prompt:="Create Excel VBA MsgBox", Buttons:=vbApplicationModal End Sub
Effects of executing macro example to create Application modal MsgBox
The following image illustrates the results of executing the macro example. This message box is Application modal.
#19: Create System modal MsgBox
VBA code to create System modal MsgBox
To create a System modal message box with VBA, use a statement with the following structure:
MsgBox Prompt:=PromptString, Buttons:=vbSystemModal
Process to create System modal MsgBox
To create a System modal message box with VBA, follow these steps:
- Create a message box with the MsgBox function (MsgBox …).
- Specify that the message box should be System modal (Buttons:=vbSystemModal).
VBA statement explanation
- Item: MsgBox.
- VBA construct: MsgBox function.
- Description: The MsgBox function does the following:
- Displays a message in a message box.
- Waits for the user to click a button.
- Returns a value of the Integer data type. This value indicates the button of the message box clicked by the user.
When you create a System modal message box using this statement structure:
- The displayed message is PromptString.
- The message box contains a single button: OK. For purposes of including other custom button layouts, please refer to the appropriate sections of this Tutorial.
- The value returned by the MsgBox function is vbOK (or 1). For purposes of assigning the value returned by the MsgBox function to a variable, please refer to the appropriate section of this Tutorial.
- Item: Prompt:=PromptString.
- VBA construct: Prompt argument of the MsgBox function and string expression.
- Description: Use the Prompt argument of the MsgBox function to specify the message displayed in the message box. For these purposes:
- You generally specify PromptString as a string expression.
- If you explicitly declare a variable to represent PromptString, you can usually work with the String data type.
- The maximum length of PromptString is roughly 1024 characters. However, this maximum length may vary slightly depending on the width of the characters within PromptString.
- PromptString can be composed of multiple lines. For purposes of creating a message box with multiple lines (by including line breaks or new lines), please refer to the appropriate section of this Tutorial.
- Item: Buttons:=vbSystemModal.
- VBA construct: Buttons argument of the MsgBox function and vbSystemModal built-in constant.
- Description: Set the Buttons argument of the MsgBox function to vbSystemModal (or 4096) to specify that the message box is System modal. When a message box is System modal, the user must respond to the message box prior to working with any application.
Macro example to create System modal MsgBox
The following macro example creates a System modal (vbSystemModal) message box with the message “Create Excel VBA MsgBox”.
Sub MsgBoxSystemModal() 'source: https://powerspreadsheets.com/ 'creates a System modal message box 'for further information: https://powerspreadsheets.com/excel-vba-msgbox/ 'create a System modal message box MsgBox Prompt:="Create Excel VBA MsgBox", Buttons:=vbSystemModal End Sub
Effects of executing macro example to create System modal MsgBox
The following image illustrates the results of executing the macro example. This message box is System modal.
Learn more about creating message boxes with VBA
Workbook example used in this Excel VBA MsgBox Tutorial
You can get immediate free access to the example workbook that accompanies this Excel VBA MsgBox Tutorial by clicking the button below.