TOP

VBA-Урок 10. Диалоговые окна (Dialog boxes)

Диалоговые окна (Dialog Boxes) в Excel VBA используются для отображения информации пользователю.

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

Самым распространенным диалоговым окном является – окно сообщений (Message Box), но мы также можем использовать диалоговое окно с вводом данных (Input Box).


MsgBox

К настоящему моменту мы использовали окно 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 нажата...

Варианты использования второго аргумента в MsgBox

ConstantNumerical ValueDescription
vbOKOnly0ok - dialog boxes
vbOKCancel1ok - dialog boxescancel - dialog boxes
vbAbortRetryIgnore2abort - dialog boxesretry - dialog boxesignore - dialog boxes
vbYesNoCancel3yes - dialog boxesno - dialog boxescancel - dialog boxes
vbYesNo4yes - dialog boxesno - dialog boxes
vbRetryCancel5retry - dialog boxescancel - dialog boxes
vbCritical16critical - dialog boxes
vbQuestion32question - dialog boxes
vbExclamation48exclamation - dialog boxes
vbInformation64information - dialog boxes

Здесь пример 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

Варианты использования второго аргумента в MsgBox

Для отображения новой ленты вы можете использовать функцию Chr с аргументом 10, которая отвечает за перенос строки, например:

MsgBox "Example 1" & Chr (10) & "Example 2" & Chr (10) & Chr (10) & "Example 3"

получим следующий результат:

InputBox

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")

Результат следующий: