TOP

VBA-Lecția 10. Casete de dialog (casete de dialog)

Casetele de dialog (Dialog Boxes) din Excel VBA sunt folosite pentru a afișa informații utilizatorului.

Funcția MsgBox afișează un mesaj într-o casetă de dialog și așteaptă ca utilizatorul să facă clic pe un buton, apoi returnează un număr întreg care indică butonul pe care a făcut clic utilizatorul.

Cel mai comun dialog este caseta de mesaje, dar putem folosi și caseta de intrare.


MsgBox

Până acum, am folosit caseta de dialog MsgBox pentru a afișa informații pe ecran.

Sub delete_B2()
    Range("B2").ClearContents
    MsgBox "The contents of B2 have been deleted !"  '„Conținutul celulei B2 a fost șters!”
End Sub

În acest caz, MsgBox este apelat cu un singur argument. Vedea codul de mai jos:

Acum vom crea o casetă de dialog care va cere confirmarea ștergerii înainte ca cele două instrucțiuni să fie executate. Apoi, vom folosi trei argumente:

MsgBox([TEXT], [BUTTONS], [TITLE])
  • TEXT: text din caseta de dialog
  • BUTTONS: selecția butoanelor (da, nu, anulare etc.) + alte opțiuni
  • TITLE: titlul casetei de dialog
  • 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
    

    Rezultat:

    Private Sub warning(var_text As String)
        MsgBox "Caution : " & var_text & " !"
    End Sub
    
    Sub macro_test()
        If Range("A1") = "" Then
            warning "empty cell"           '"celula goala"
        ElseIf Not IsNumeric(Range("A1")) Then
            warning "non-numerical value"  '„valoare non-numerică”
        End If
    End Sub
    

    vbYesNo specifică că butoanele de dialog sunt „Yes” și „No”, iar vbYes reprezintă butonul „Yes”:

    If MsgBox("Text", vbYesNo, "Title") = vbYes Then 'Dacă butonul Yes este apăsat...
    

    Opțiuni pentru utilizarea celui de-al doilea argument în MsgBox

    Constant Valoare numerică Descriere
    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

    Exemplu de utilizare a celui de-al doilea argument în MsgBox

    Iată un exemplu MsgBox care va continua să fie afișat de fiecare dată în buclă până când utilizatorul apasă Yes:

    Sub humor()
        Do
            If MsgBox("Do you like the Moonexcel site ?", vbYesNo, "Survey") = vbYes Then
                Exit Do '=> Răspuns Yes = Da, ieșim din buclă
            End If
        Loop While 1 = 1 '=> Buclă fără sfârșit
        MsgBox ";-)"
    End Sub
    

    Pentru a afișa o panglică nouă, puteți utiliza funcția Chr cu argumentul 10, care este responsabilă pentru mutarea panglicii, de exemplu:

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

    Obtinem urmatorul rezultat:

    InputBox

    O casetă de intrare solicită utilizatorului să introducă o valoare într-o casetă de dialog, de exemplu:

    Sub example()
        Dim result As String
       
        result = InputBox("Text ?", "Title") 'Variabilei i se atribuie valoarea introdusă în InputBox
       
        If result <> "" Then 'Dacă valoarea este orice, dar nu „”, atunci rezultatul va fi afișat
           MsgBox result
        End If
    End Sub
    

    Obtinem urmatorul rezultat:

    Al treilea argument poate fi folosit pentru a seta valoarea implicită:

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

    Rezultatul este următorul: