Диалоговые окна (Dialog Boxes) в Excel VBA используются для отображения информации пользователю.
Функция MsgBox отображает сообщение в открывшемся диалоговом окне и ожидает, что пользователь нажмет кнопку, после чего, возвращает целое число, указывающее на то, какую кнопку пользователь щелкнул.
Самым распространенным диалоговым окном является – окно сообщений (Message Box), но мы также можем использовать диалоговое окно с вводом данных (Input Box).
К настоящему моменту мы использовали окно MsgBox, чтобы выводить информацию на экран.
Sub delete_B2 () Range ("B2"). ClearContents MsgBox "Содержание ячейки B2 удалено!" End Sub
В этом случае MsgBox вызывается только с одним аргументом. См. код ниже:
Сейчас мы создадим диалоговое окно, которое будет просить подтверждение для удаления, прежде чем две инструкции будут выполнены. Далее есть три аргумента, которые мы будем использовать:
MsgBox ([TEXT], [BUTTONS], [TITLE])Text: текст диалогового окна Buttons: выбор кнопок (yes, no, cancel и т.п.) + другие опции 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 "пустая ячейка" ElseIf Not IsNumeric (Range ("A1")) Then warning "нецифровое значение" End If End Sub
vbYesNo отмечает, что кнопками диалогового окна являются "Yes" и "No", а vbYes представляет кнопку "Yes":
If MsgBox("Text", vbYesNo, "Title") = vbYes Then 'Если кнопка Yes нажата...
Constant | Numerical Value | Description |
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")
Результат следующий: