ВГОРУ

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

YouLibreCalc for Excel logo

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

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

Найпоширенішим діалоговим вікном є - вікно повідомлень (Message Box), але ми також можемо використовувати діалогове вікно з введенням даних (Input Box).


MsgBox

До теперішнього моменту ми використовували діалогове вікно MsgBox, щоби виводити інформацію на екран.

Sub delete_B2()
    Range("B2").ClearContents
    MsgBox "The contents of B2 have been deleted !"  ' "Вміст комірки 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 "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 натиснута...
    

    Варіанти використання другого аргументу у MsgBox

    Константа Числове значення Опис
    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

    Тут є приклад 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

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

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