У цьому посібнику буде розглянуто, як використовувати функцію VBA MsgBox для відображення скриньки повідомлень для користувачів (включаючи ящик повідомлень YesNo). Вам також може бути цікава наша стаття про InputBoxes.
Функція VBA MsgBox
У VBA легко відобразити простий MsgBox:
1 | MsgBox "Це вікно повідомлень" |
Однак ви можете зробити набагато більше, ніж відобразити просте вікно повідомлення "OK". Давайте швидко поглянемо на складний приклад, перш ніж заглибитися в конкретику …
Вікно повідомлень VBA Так Ні
Нижче ми створимо вікно повідомлень із:
- Заголовок "Заголовок вікна повідомлень" та запит "Текст"
- Значок знака питання
- Так / Ні варіанти замість простого "OK"
- Кнопка за умовчанням = "Ні"
123 | Нечітка відповідь Як ціле числоanswer = MsgBox ("Текст", vbQuestion + vbТак Ні + vbDefaultButton2, "Заголовок вікна повідомлень") |
Ящик повідомлень поверне vbYes або vbNo залежно від вибору користувача. Потім ви можете виконувати різні дії на основі вибору:
12345 | Якщо відповідь = vbТакПовідомлення "Так"ІнакшеПовідомлення "Ні"Закінчити Якщо |
У наступному розділі ми покажемо вам усі варіанти, доступні вам під час створення вікон повідомлень. Потім ми познайомимо вас із синтаксисом функції MsgBox і, нарешті, розглянемо інші приклади вікон повідомлень.
Параметри вікна повідомлень VBA
Подивіться на зображення нижче. Тут ви побачите (майже) усі варіанти, доступні вам під час створення вікон повідомлень. Зверніть увагу на значки та різні кнопки.
Це знімок екрана “MessageBox Builder” з нашої надбудови Premium VBA: AutoMacro. Конструктор MessageBox дозволяє швидко розробити потрібну скриньку повідомлень і вставити код у модуль коду. Він також містить багато інших конструкторів коду, велику бібліотеку кодів VBA та різноманітні засоби кодування. Це обов’язкова умова будь-якого розробника VBA.
Синтаксис функції MsgBox
MsgBox (підказка [, кнопки] [, заголовок] [, файл довідки, контекст])
підказка (обов'язково) - Це основний текст вікна повідомлення.
кнопки - Виберіть, які кнопки відображати. Якщо пропущено, "ОК". Тут ви також можете вказати, який значок відображати, і кнопку за замовчуванням.
титул - Заголовок у верхній частині вікна повідомлення. Якщо його не вказано, відображається назва поточної програми (наприклад, Microsoft Excel).
файл довідки - Вкажіть файл довідки, до якого можна отримати доступ, коли користувач натисне кнопку «Довідка». Якщо вказано, ви також повинні додати контекст (нижче)
контекст - Числовий вираз, що представляє номер контексту довідки, призначений для відповідної теми довідки.
Ви, ймовірно, можете ігнорувати файл довідки та аргументи контексту. Я ніколи не бачив їх у використанні.
Налаштуйте назву та сповіщення вікна повідомлень
Функція MsgBox дозволяє вам налаштувати заголовок та повідомлення із запитами так:
1 | Повідомлення "Підказка" ,, "Назва" |
Інший приклад:
123 | Sub MsgBoxPromptTitle ()MsgBox "Крок 1 завершено. Натисніть OK, щоб запустити крок 2." ,, "Крок 1 з 5"End Sub |
Важливо! Ви повинні пам’ятати, що оточуєте текст цитатами.
Порушення рядків MessageBox
Ви також можете додати розриви рядків до запитів у вікні повідомлень за допомогою "vbNewLine".
123 | Sub MsgBoxPromptTitle_NewLine ()MsgBox "Крок 1 завершено". & vbNewLine & "Натисніть OK, щоб запустити крок 2.", "Крок 1 з 5"End Sub |
Зверніть увагу, що ми використовуємо символ & для об’єднання тексту. Ви можете дізнатися більше про використання & з текстом та інші варіанти вставлення розривів рядків у нашій статті про приєднання тексту.
Значки MsgBox
VBA дає вам можливість додати одну з чотирьох попередньо вбудованих піктограм у ваші скриньки повідомлень:
Значок Константа | Значок |
---|---|
vbІнформація | |
vbCritical | |
vbQuestion | |
vbEcclamation |
Константа Icon повинна бути розміщена в аргументі кнопки:
123 | Sub MsgBoxQuestionIcon ()MsgBox "Приклад запитання", vbQuestionEnd Sub |
Це створить стандартне вікно повідомлення "OK" з піктограмою питання:
Зверніть увагу, як під час набору тексту редактор VBA покаже вам доступні для вас параметри:
Це корисно, оскільки вам не потрібно пам’ятати точний синтаксис чи назви піктограм чи кнопок.
Тепер ми демонструємо кожен значок вікна повідомлення:
Значки MsgBox - інформація
123 | Sub MsgBoxInformationIcon ()MsgBox "Інформаційний приклад", vbInformationEnd Sub |
Значки MsgBox - критично важливі
123 | Sub MsgBoxCriticalIcon ()MsgBox "Критичний приклад", vbCriticalEnd Sub |
Значки MsgBox - питання
123 | Sub MsgBoxQuestionIcon ()MsgBox "Приклад запитання", vbQuestionEnd Sub |
Значки MsgBox - вигук
123 | Sub MsgBoxExclamationIcon ()MsgBox "Приклад оклику", vbExclamationEnd Sub |
Нижче ми поговоримо про створення вікон повідомлень з різними розкладками кнопок. Якщо ви все -таки обрали інший тип вікна повідомлення, вам потрібно буде додати тип піктограми після кнопок за допомогою “+”:
123 | Sub MsgBoxQuestionIcon ()MsgBox "Хочете продовжити?", VbOKCancel + vbQuestionEnd Sub |
Змінні MsgBox
Поки що ми працювали насамперед із вікном повідомлень "OK" за умовчанням. У вікні повідомлення "ОК" є лише один варіант: натискання "OK" дозволяє продовжити код. Однак ви також можете вказати інші групи кнопок: OK / Скасувати, Так / Ні тощо.
У цьому випадку вам буде потрібно виконувати різні дії, залежно від того, яка кнопка натиснута. Розглянемо приклад.
Ось вікно повідомлень, яке ми будемо генерувати:
Це весь код (далі ми його розберемо):
123456789101112 | Sub MsgBoxVariable ()Нечітка відповідь Як ціле числоanswer = MsgBox ("Хочете продовжити?", vbQuestion + vbТак)Якщо відповідь = vbТакПовідомлення "Так"ІнакшеПовідомлення "Ні"Закінчити ЯкщоEnd Sub |
Спочатку ми призначаємо вихідний ящик повідомлень цілочисельній змінній.
123 | Нечітка відповідь Як ціле числоanswer = MsgBox ("Хочете продовжити?", vbQuestion + vbТак) |
Далі ми використовуємо If-Else, щоб визначити, що робити на основі натискання кнопки:
12345 | Якщо відповідь = vbТакПовідомлення "Так"ІнакшеПовідомлення "Ні"Закінчити Якщо |
Функція MsgBox повертає ціле число (між 1-7), тому ми визначаємо змінну як цілочисельний тип. Однак, замість посилання на ціле число, ви можете посилатися на константу (наприклад, vbOK, vbCancel тощо). Подивіться на цю таблицю, щоб побачити всі варіанти:
Кнопка | Постійна | Цінність |
---|---|---|
в порядку | vbOK | 1 |
Скасувати | vbCancel | 2 |
Скасувати | vbAbort | 3 |
Повторіть спробу | vbRetry | 4 |
Ігнорувати | vbIgnore | 5 |
Так | vbТак | 6 |
Немає | vbНі | 7 |
Тепер ми демонструємо кожну групу кнопок:
Окно повідомлень ОК - vbOKТільки
Це стандартна скринька повідомлень VBA.
123456 | Sub MsgBox_OKOnly ()Нечітка відповідь Як ціле числоanswer = MsgBox ("Приклад OKOnly", vbOKOnly)End Sub |
OK Скасувати вікно повідомлень - vbOKСкасувати
123456789101112 | Sub MsgBox_OKCancel ()Нечітка відповідь Як ціле числоanswer = MsgBox ("OK Скасувати приклад", vbOKCancel)Якщо відповідь = vbOK ТодіПовідомлення "OK"ІнакшеПовідомлення "Скасувати"Закінчити ЯкщоEnd Sub |
Так Ні Окно повідомлень - vbТак
123456789101112 | Sub MsgBox_Так Ні ()Нечітка відповідь Як ціле числоanswer = MsgBox ("Так Ні Приклад", vbYesNo)Якщо відповідь = vbТакПовідомлення "Так"ІнакшеПовідомлення "Ні"Закінчити ЯкщоEnd Sub |
Так Ні Скасувати вікно повідомлень - vbТакНі Скасувати
1234567891011121314 | Sub MsgBox_ТакНі Скасувати ()Нечітка відповідь Як ціле числоanswer = MsgBox ("Так Ні Скасувати Приклад", vbYesNoCancel)Якщо відповідь = vbТакПовідомлення "Так"В іншому випадку, якщо відповідь = vbNo ТодіПовідомлення "Ні"ІнакшеПовідомлення "Скасувати"Закінчити ЯкщоEnd Sub |
Вікно повідомлень «Ігнорувати повторне скасування» - vbAbortRetryIgnore
1234567891011121314 | Sub MsgBox_AbortRetryIgnore ()Нечітка відповідь Як ціле числоanswer = MsgBox ("Приклад ігнорування повторного спроби скасувати", vbAbortRetryIgnore)Якщо відповідь = vbAbort ТодіПовідомлення "Перервати"В іншому випадку answer = vbRetry ТодіПовідомлення "Повторити"ІнакшеMsgBox "Ігнорувати"Закінчити ЯкщоEnd Sub |
Повторити спробу скасувати вікно повідомлень - vbRetryCancel
123456789101112 | Sub MsgBox_RetryCancel ()Нечітка відповідь Як ціле числоanswer = MsgBox ("Приклад повторного скасування", vbRetryCancel)Якщо відповідь = vbПовторіть тодіПовідомлення "Повторити"ІнакшеПовідомлення "Скасувати"Закінчити ЯкщоEnd Sub |
Приклади MessageBox VBA
Підтвердження вікна повідомлень перед запуском макросу
У цьому коді перед викликом макросу відображатиметься вікно повідомлення Так Ні. Якщо натиснути Так, викликається макрос, якщо натиснути Ні, макрос не запускається.
12345678 | Sub Msgbox_BeforeRunning ()Нечітка відповідь Як ціле числоanswer = MsgBox ("Ви хочете запустити Macro1?", vbQuestion + vbТак Ні)Якщо відповідь = vbТак, викличте макрос1End Sub |
Так / Ні Поле повідомлень - Вийти з підп
Тут ми підтвердимо з користувачем, чи продовжувати запуск макросу. Якщо натиснути Ні, код вийде з підрозділу, інакше процедура продовжиться.
12345678910 | Sub Msgbox_BeforeRunning ()Нечітка відповідь Як ціле числоanswer = MsgBox ("Хочете продовжити?", vbQuestion + vbТак)Якщо відповідь = vbNo, то вийдіть із суб"Якийсь кодексEnd Sub |
Вікно повідомлень VBA у Access VBA
Усі наведені вище приклади працюють точно так само в Access VBA, як і в Excel VBA.