MsgBox

В Excel VBA вы можете использовать функцию MsgBox для отображения окна сообщения (как показано ниже):

Default message in a VBA Msgbox

MsgBox — это не что иное, как диалоговое окно, которое вы можете использовать для информирования своих пользователей, показывая пользовательское сообщение или получая некоторые основные входные данные (такие как Да / Нет или OK / Отмена).

Пока отображается диалоговое окно MsgBox, ваш код VBA останавливается. Вам нужно нажать любую из кнопок в MsgBox, чтобы запустить оставшийся код VBA.

Примечание: в этом уроке я буду использовать слова «окно сообщения» и MsgBox взаимозаменяемо. При работе с Excel VBA вам всегда нужно использовать MsgBox.

Анатомия VBA MsgBox в Excel

Окно сообщения состоит из следующих частей:

Anatomy of an VBA Msgbox dialog box
  1. Title — заголовок: обычно используется для отображения содержания окна сообщения. Если вы ничего не указали, отображается имя приложения, в данном случае Microsoft Excel.
  2. Prompt — подсказка: это сообщение, которое вы хотите отобразить. Вы можете использовать это пространство, чтобы написать пару строк или даже отобразить таблицы / данные здесь.
  3. Button(s) — кнопка(-и): хотя кнопка «ОК» является кнопкой по умолчанию, ее можно настроить таким образом, чтобы отображать такие кнопки, как «Да / Нет»; «Да / Нет / Отмена», «Повторить» / «Пропустить» и т.д.
  4. 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 (по умолчанию)

Если вы используете только приглашение и не указываете ни один из аргументов, вы получите окно сообщения по умолчанию, как показано ниже:

Sample message box

Ниже приведен код, который выдаст это окно сообщения:

Sub DefaultMsgBox()
MsgBox "This is a sample box"
End Sub

Обратите внимание, что текстовая строка должна быть в двойных кавычках.

Вы также можете использовать постоянную кнопку vbOKOnly, но даже если вы ничего не указали, она используется по умолчанию.

Кнопки MsgBox — ОК и Отмена

Если вы хотите показать только ОК и кнопку Отмена, вам нужно использовать константу vbOKCancel

Sub MsgBoxOKCancel()
MsgBox "Want to Continue?", vbOKCancel
End Sub
ok and cancel buttons in a message box

Кнопки MsgBox — Отмена, Повтор и Игнорирование

Вы можете использовать константу vbAbortRetryIgnore для отображения кнопок «Отмена», «Повторить» и «Игнорировать».

Sub MsgBoxAbortRetryIgnore()
MsgBox "What do you want to do?", vbAbortRetryIgnore
End Sub
Excel VBA Msgbox - Abort Retry and Cancel buttons

Кнопки MsgBox — Да и Нет

Вы можете использовать константу vbYesNo для отображения кнопок Да и Нет.

Sub MsgBoxYesNo()
MsgBox "Should we stop?", vbYesNo
End Sub
Yes and No buttons in a message box

Кнопки MsgBox — Да, Нет и Отмена

Вы можете использовать константу vbYesNoCancel для отображения кнопок «Да», «Нет» и «Отмена».

Sub MsgBoxYesNoCancel()
MsgBox "Should we stop?", vbYesNoCancel
End Sub
Excel VBA Message Box- Yes and No and Cancel

Кнопки MsgBox — повторить попытку и отменить

Вы можете использовать константу vbRetryCancel для отображения кнопок «Повторить» и «Отмена».

Sub MsgBoxRetryCancel()
MsgBox "What do you want to do next?", vbRetryCancel
End Sub
Retry and Cancel buttons

Кнопки MsgBox — Кнопка справки

Вы можете использовать константу vbMsgBoxHelpButton для отображения кнопки справки. Вы можете использовать его с другими константами кнопок.

Sub MsgBoxRetryHelp()
MsgBox "What do you want to do next?", vbRetryCancel + vbMsgBoxHelpButton
End Sub
help button in the message box dialog box

Обратите внимание, что в этом коде мы объединили две разные константы кнопки (vbRetryCancel + vbMsgBoxHelpButton). Первая часть показывает кнопки «Повторить» и «Отмена», а вторая часть показывает кнопку «Справка».

MsgBox Buttons — Настройка кнопки по умолчанию

Вы можете использовать константу vbDefaultButton1 для установки первой кнопки по умолчанию. Это означает, что кнопка уже выбрана, и если вы нажмете Enter, она выполнит эту кнопку.

Ниже приведен код, который установит в качестве кнопки по умолчанию вторую кнопку (кнопка «Нет»).

Sub MsgBoxOKCancel()
MsgBox "What do you want to do next?", vbYesNoCancel + vbDefaultButton2
End Sub
by default, second button is selected

В большинстве случаев крайняя левая кнопка является кнопкой по умолчанию. Вы можете выбрать другие кнопки, используя 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
Excel VBA Msgbox - critical icon

Если вы хотите показать критический значок с кнопками Да и Нет, используйте следующий код:

Sub MsgBoxCriticalIcon()
MsgBox "This is a sample box", vbYesNo + vbCritical
End Sub
Excel VBA Msgbox - critical icon YesNO

Иконки MsgBox — Вопрос

Если вы хотите показать иконку вопроса в своем MsgBox, используйте константу vbQuestion.

Sub MsgBoxQuestionIcon()
MsgBox "This is a sample box", vbYesNo + vbQuestion
End Sub
Excel VBA Msgbox - question icon

Иконки MsgBox — Восклицательный знак

Если вы хотите показать восклицательный значок в вашем MsgBox, используйте константу vbExclamation.

Sub MsgBoxExclamationIcon()
MsgBox "This is a sample box", vbYesNo + vbExclamation
End Sub
Excel VBA Msgbox - exclamation icon

Иконки MsgBox — Информация

Если вы хотите отобразить информационный значок в вашем MsgBox, используйте константу vbInformation.

Sub MsgBoxInformationIcon()
MsgBox "This is a sample box", vbYesNo + vbInformation
End Sub
Excel VBA Msgbox - information

Настройка заголовка и приглашения в MsgBox

При использовании MsgBox вы можете настроить заголовок и сообщения подсказок.

До сих пор в примерах, которые мы видели, использовался Microsoft Excel в качестве заголовка. Если вы не указали аргумент title, MsgBox автоматически использует заголовок приложения (в данном случае это был Microsoft Excel).

Вы можете настроить заголовок, указав его в коде, как показано ниже:

Sub MsgBoxInformationIcon()
MsgBox "Do you want to continue?", vbYesNo + vbQuestion, "Step 1 of 3"
End Sub
Excel VBA Msgbox - title

Точно так же вы также можете настроить сообщение подсказки.

Excel VBA Msgbox - prompt

Вы также можете добавить разрывы строк в сообщении подсказки.

В приведенном ниже коде я добавил разрыв строки, используя «vbNewLine».

Sub MsgBoxInformationIcon()
MsgBox "Do you want to continue?" & vbNewLine & "Click Yes to Continue", vbYesNo + vbQuestion, "Step 1 of 3"
End Sub
Excel VBA Msgbox - vbnewline

Вы также можете использовать символ возврата каретки — 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
Yes No prompt based on user selection

В приведенном выше коде я присвоил значение функции MsgBox переменной Result. Когда вы нажимаете кнопку «Да», переменная Result получает константу vbYes (или число 6), а когда вы нажимаете «Нет», переменная Result получает константу vbNo (или число 7).

Затем я использовал конструкцию If Then Else, чтобы проверить, содержит ли переменная Result значение vbYes. Если это так, отображается запрос «Вы нажали Да», в противном случае — «Вы нажали Нет».

Вы можете использовать ту же концепцию для запуска кода, если пользователь нажимает Да, и выход из подпрограммы, когда он нажимает Нет.

Примечание. Когда вы присваиваете выход MsgBox переменной, вы должны поместить аргументы функции MsgBox в круглые скобки. Например, в строке Result = MsgBox («Хотите продолжить?», VbYesNo + vbQuestion) вы можете видеть, что аргументы находятся в скобках.

Если вы хотите в дальнейшем углубиться в функцию Message Box, вот официальный документ по ней.

Оцените статью
Добавить комментарий

  1. Александр

    Спасибо! Вопрос — есть ли msgbox с одобрением (зеленая галочка) как с vbCritical появляется красный крестик?

    Ответить
    1. Дмитрий Якушев автор

      К сожалению настройки MSGBOX ограничены и то, что вы пишите отсутствует.
      Как вариант — реализовывать задачу, которую сейчас хотели через msgbox с помощью создания UserForm

      Ответить