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

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

Результат наступний:

Статті по темі:

  • VBA-Урок 9. Процедури і функції
  • VBA-Урок 11.1. Події робочої книги (Workbook Events)