TOP

VBA-Lekcja 10. Okna dialogowe (Okna dialogowe)

YouLibreCalc for Excel logo

Okna dialogowe (okna dialogowe) w Excel VBA służą do wyświetlania informacji użytkownikowi.

Funkcja MsgBox wyświetla komunikat w oknie dialogowym i czeka, aż użytkownik kliknie przycisk, a następnie zwraca liczbę całkowitą wskazującą, który przycisk kliknął użytkownik.

Najpopularniejszym oknem dialogowym jest Okno Wiadomości, ale możemy także użyć Okna Wprowadzania.


MsgBox

Do tej pory do wyświetlania informacji na ekranie używaliśmy okna dialogowego MsgBox.

Sub delete_B2()
    Range("B2").ClearContents
    MsgBox "The contents of B2 have been deleted !"  '„Zawartość komórki B2 została usunięta!”
End Sub

W tym przypadku MsgBox jest wywoływany tylko z jednym argumentem. Widzieć kod poniżej:

Teraz utworzymy okno dialogowe, które poprosi o potwierdzenie usunięcia przed wykonaniem dwóch instrukcji. Następnie użyjemy trzech argumentów:

MsgBox([TEXT], [BUTTONS], [TITLE])
  • TEXT: tekst okna dialogowego
  • BUTTONS: wybór przycisków (tak, nie, anuluj itp.) + inne opcje
  • TITLE: tytuł okna dialogowego
  • 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
    

    Wynik:

    Private Sub warning(var_text As String)
        MsgBox "Caution : " & var_text & " !"
    End Sub
    
    Sub macro_test()
        If Range("A1") = "" Then
            warning "empty cell"           '„pusta komórka”
        ElseIf Not IsNumeric(Range("A1")) Then
            warning "non-numerical value"  '„wartość nienumeryczna”
        End If
    End Sub
    

    vbYesNo określa, że przyciski okna dialogowego to „Yes” i „No”, a vbYes reprezentuje przycisk „Yes”:

    If MsgBox("Text", vbYesNo, "Title") = vbYes Then 'Jeśli zostanie naciśnięty przycisk Tak...
    

    Opcje użycia drugiego argumentu w MsgBox

    Stały Wartość numeryczna Opis
    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

    Przykład użycia drugiego argumentu w MsgBox

    Oto przykład MsgBox, który będzie wyświetlany za każdym razem w pętli, dopóki użytkownik nie naciśnie Yes:

    Sub humor()
        Do
            If MsgBox("Do you like the Moonexcel site ?", vbYesNo, "Survey") = vbYes Then
                Exit Do '=> Odpowiedź Yes = Tak, wychodzimy z pętli
            End If
        Loop While 1 = 1 '=> Niekończąca się pętla
        MsgBox ";-)"
    End Sub
    

    Aby wyświetlić nową wstążkę można skorzystać z funkcji Chr z argumentem 10, która odpowiada za przesunięcie wstążki, przykładowo:

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

    Otrzymujemy następujący wynik:

    Pole wprowadzania

    Pole wejściowe monituje użytkownika o wprowadzenie wartości w oknie dialogowym, na przykład:

    Sub example()
        Dim result As String
       
        result = InputBox("Text ?", "Title") 'Zmiennej przypisuje się wartość wpisaną w polu wejściowym
       
        If result <> "" Then 'Jeśli wartość jest inna niż „”, wówczas zostanie wyświetlony wynik
           MsgBox result
        End If
    End Sub
    

    Otrzymujemy następujący wynik:

    Trzeci argument może zostać użyty do ustawienia wartości domyślnej:

    InputBox("Text ?", "Title", "Default value")
    

    Wynik jest następujący: