TOP

VBA-Lektion 10. Dialogfenster (Dialog boxes)

YouLibreCalc for Excel logo

Dialogfelder (Dialog Boxes) in Excel VBA werden verwendet, um dem Benutzer Informationen anzuzeigen.

Die Funktion MsgBox zeigt eine Meldung in einem Dialogfeld an, wartet darauf, dass der Benutzer auf eine Schaltfläche klickt, und gibt eine Ganzzahl zurück, die angibt, auf welche Schaltfläche der Benutzer geklickt hat.

Der am häufigsten verwendete Dialog ist das Meldungsfeld, wir können aber auch das Eingabefeld verwenden.


MsgBox

Bisher haben wir das Dialogfeld MsgBox verwendet, um Informationen auf dem Bildschirm anzuzeigen.

Sub delete_B2()
    Range("B2").ClearContents
    MsgBox "The contents of B2 have been deleted !"  '„Der Inhalt der Zelle B2 wurde gelöscht!“
End Sub

In diesem Fall wird MsgBox mit nur einem Argument aufgerufen. Sehen Code unten:

Jetzt erstellen wir ein Dialogfeld, das zur Bestätigung des Löschens auffordert, bevor die beiden Anweisungen ausgeführt werden. Dann gibt es drei Argumente, die wir verwenden werden:

MsgBox([TEXT], [TASTEN], [TITEL])
  • Text: Dialogtext
  • Buttons: Auswahl der Schaltflächen (Ja, Nein, Abbrechen usw.) + weitere Optionen
  • Title: der Titel des Dialogfelds
  • 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
    

    Ergebnis:

    Private Sub warning(var_text As String)
        MsgBox "Caution : " & var_text & " !"
    End Sub
    
    Sub macro_test()
        If Range("A1") = "" Then
            warning "empty cell"           '„Leere Zelle“
        ElseIf Not IsNumeric(Range("A1")) Then
            warning "non-numerical value"  '„nicht numerischer Wert“
        End If
    End Sub
    

    vbYesNo gibt an, dass die Dialogschaltflächen „Yes“ und „No“ sind, und vbYes stellt die Schaltfläche „Yes“ dar:

    If MsgBox("Text", vbYesNo, "Title") = vbYes Then 'Wenn die Schaltfläche Yesbl_ gedrückt wird...
    

    Optionen für die Verwendung des zweiten Arguments in MsgBox

    Konstante Numerischer Wert Beschreibung
    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

    Beispiel für die Verwendung des zweiten Arguments in MsgBox

    Hier ist ein Beispiel für MsgBox, das jedes Mal in der Schleife angezeigt wird, bis der Benutzer Yes drückt:

    Sub humor()
        Do
            If MsgBox("Do you like the Moonexcel site ?", vbYesNo, "Survey") = vbYes Then
                Exit Do '=> Antwort Yes = Ja, wir verlassen die Schleife
            End If
        Loop While 1 = 1 '=> Endlosschleife
        MsgBox ";-)"
    End Sub
    

    Um ein neues Menüband anzuzeigen, können Sie die Funktion Chr mit Argument 10 verwenden, die für das Verschieben des Menübands verantwortlich ist, zum Beispiel:

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

    Wir erhalten folgendes Ergebnis:

    Eingabefeld

    Eine InputBox fordert den Benutzer auf, einen Wert in ein Dialogfeld einzugeben, zum Beispiel:

    Sub example()
        Dim result As String
       
        result = InputBox("Text ?", "Title") 'Der Variablen wird der in der InputBox eingegebene Wert zugewiesen
       
        If result <> "" Then 'Wenn der Wert etwas anderes als „“ ist, wird das Ergebnis angezeigt
           MsgBox result
        End If
    End Sub
    

    Wir erhalten folgendes Ergebnis:

    Mit dem dritten Argument kann der Standardwert festgelegt werden:

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

    Das Ergebnis ist wie folgt: