Діалогові вікна (Dialog Boxes) в Excel VBA використовуються для відображення інформації користувачу.
Функція MsgBox відображає повідомлення в діалоговому вікні та очікує, що користувач натисне кнопку, після чого, повертає ціле число, яке вказує на те, яку кнопку користувач клацнув.
Найпоширенішим діалоговим вікном є - вікно повідомлень (Message Box), але ми також можемо використовувати діалогове вікно з введенням даних (Input Box).
До теперішнього моменту ми використовували діалогове вікно MsgBox, щоби виводити інформацію на екран.
Sub delete_B2() Range("B2").ClearContents MsgBox "The contents of B2 have been deleted !" ' "Вміст комірки B2 видалений !" End Sub
В цьому випадку MsgBox викликається лише з одним аргументом. Див. код нижче:
Зараз ми створимо діалогове вікно, яке проситиме підтвердження для видалення, до того як дві інструкції будуть виконані. Далі є три аргументи, які ми будемо використовувати:
MsgBox([TEXT], [BUTTONS], [TITLE])
Sub delete_B2() If MsgBox("Are you sure that you wish to delete the contents of B2 ?", vbYesNo, "Confirm") = vbYes Then Range("B2").ClearContents MsgBox "The contents of B2 have been deleted !" End If End Sub
Результат:
Private Sub warning(var_text As String) MsgBox "Caution : " & var_text & " !" End Sub Sub macro_test() If Range("A1") = "" Then warning "empty cell" ' "порожня комірка" ElseIf Not IsNumeric(Range("A1")) Then warning "non-numerical value" ' "нечислове значення" End If End Sub
vbYesNo зазначає, що кнопки діалогового вікна є "Yes" і "No", та vbYes представляє кнопку "Yes":
If MsgBox("Text", vbYesNo, "Title") = vbYes Then 'Якщо кнопка Yes натиснута...
Константа | Числове значення | Опис |
---|---|---|
vbOKOnly | 0 | |
vbOKCancel | 1 | |
vbAbortRetryIgnore | 2 | |
vbYesNoCancel | 3 | |
vbYesNo | 4 | |
vbRetryCancel | 5 |
vbCritical | 16 | |
vbQuestion | 32 | |
vbExclamation | 48 | |
vbInformation | 64 |
Тут є приклад MsgBox, що буде продовжувати відображатись кожного разу при циклі, допоки користувач тиснутиме Yes:
Sub humor() Do If MsgBox("Do you like the Moonexcel site ?", vbYesNo, "Survey") = vbYes Then Exit Do ' => Відповідь Yes = Так, ми виходимо з циклу End If Loop While 1 = 1 ' => Нескінченний цикл MsgBox ";-)" End Sub
Для відображення нової стрічки ви можете використати функцію Chr з аргументом 10, який відповідає за перенесення стрічки, наприклад:
MsgBox "Example 1" & Chr(10) & "Example 2" & Chr(10) & Chr(10) & "Example 3"
Отримаємо наступний результат:
InputBox запитує користувача ввести значення в діалогове вікно, наприклад:
Sub example() Dim result As String result = InputBox("Text ?", "Title") 'Змінній присвоюється значення, що введене в InputBox If result <> "" Then 'Якщо значення будь-яке, але не "", то результат буде відображений MsgBox result End If End Sub
Отримаємо наступний результат:
Третій аргумент може бути використаний для встановлення значення по замовчуванню:
InputBox("Text ?", "Title", "Default value")
Результат наступний: