VBA – Ja Nein Message Box (MsgBox)
In this Article
In diesem Tutorial erfahren Sie, wie Sie die VBA-Funktion MsgBox verwenden können, um Benutzern Meldungen in einem Dialogfeld anzuzeigen (einschließlich eines Ja-Nein-Meldungsfeldes). Vielleicht haben Sie auch an unserem Artikel über InputBoxen Interesse.
VBA MsgBox Funktion
In VBA ist es einfach, ein einfaches Meldungsfeld anzuzeigen:
MsgBox "Dies ist eine Messagebox"
Es ist noch wesentlich mehr möglich, als nur ein einfaches OK-Meldungsfeld anzuzeigen. Schauen wir uns kurz ein kompliziertes Beispiel an, bevor wir uns mit dessen Einzelheiten befassen…
VBA Ja-Nein-MessageBox
Im Folgenden erstellen wir ein Dialogfeld mit:
- einem Titel „Message Box Titel“ und einer Eingabeaufforderung „Text“
- einem Fragezeichen-Symbol
- Ja/Nein-Optionen anstelle eines einfachen „OK“
- Standard-Schaltfläche = ‚Nein‘
Dim Antwort As Integer
Antwort = MsgBox("Text", vbQuestion + vbYesNo + vbDefaultButton2, "Message Box Titel")
Die Message Box gibt je nach Auswahl des Benutzers vbYes oder vbNo zurück. Sie können dann je nach Wahl verschiedene Aktionen durchführen:
If Antwort = vbYes Then
MsgBox "Ja"
Else
MsgBox "Nein"
End If
Im nächsten Abschnitt zeigen wir Ihnen alle Möglichkeiten, die Ihnen bei der Erstellung von Nachrichtenfeldern zur Verfügung stehen. Dann werden wir Sie in die Syntax der MsgBox-Funktion einführen und schließlich weitere Beispiele für Meldungsboxen durchgehen.
VBA Message Box Optionen
Werfen Sie einen Blick auf das folgende Bild. Hier sehen Sie (fast) alle Optionen, die Ihnen bei der Erstellung von Meldungsfeldern zur Verfügung stehen. Beachten Sie die Icons und die verschiedenen Schaltflächen.
Dies ist ein Screenshot des „MessageBox Builders“ aus unserem Premium VBA Add-in: AutoMacro. Mit dem MessageBox Builder können Sie Ihre gewünschte MessageBox schnell entwerfen und den Code in Ihr Codemodul einfügen. Er enthält auch viele andere Code-Builder, eine umfangreiche VBA-Code-Bibliothek und eine Reihe von Codierungswerkzeugen. Es ist ein Muss für jeden VBA-Entwickler.
Syntax der MsgBox-Funktion
MsgBox( prompt [, buttons ] [, title ] [, helpfile, context ] )
prompt (erforderlich) – Dies ist der primäre Text des Nachrichtenfeldes und fordert den Nutzer zu einer Eingabe auf.
buttons – Wählen Sie, welche Schaltflächen angezeigt werden sollen. Wenn nicht angegeben, ‚OKonly‘. Hier können Sie auch angeben, welches Symbol angezeigt werden soll und welche Standardschaltflächen zur Verfügung stehen.
title – Der Titel am oberen Rand des Meldungsfeldes. Wird er weggelassen, wird der Name der aktuellen Anwendung angezeigt (z. B. Microsoft Excel).
helpfile – Geben Sie die Hilfedatei an, die aufgerufen werden kann, wenn der Benutzer auf die Schaltfläche „Hilfe“ klickt. Wenn angegeben, müssen Sie auch den Kontext hinzufügen (siehe unten)
context – Numerischer Ausdruck, der die Nummer des Hilfekontexts angibt, der dem entsprechenden Hilfethema zugeordnet ist.
Sie können die Argumente helpfile und context wahrscheinlich ignorieren. Ich habe sie noch nie benutzt gesehen.
Titel und Eingabeaufforderung der Messagebox anpassen
Mit dem Befehl MsgBox können Sie den Titel und die Eingabeaufforderung wie folgt anpassen:
Msgbox "Eingabeaufforderung",, "Titel"
Ein anderes Beispiel:
Sub MsgBoxPromptTitle()
MsgBox "Schritt 1 abgeschlossen. Klicken Sie auf OK, um Schritt 2 auszuführen.",, "Schritt 1 von 5"
End Sub
Wichtig! Denken Sie daran, Ihren Text in Anführungszeichen zu setzen.
MessageBox Zeilenumbrüche
Mit ‚vbNewLine‘ können Sie in Ihre MessageBox-Eingabeaufforderungen Zeilenumbrüche einfügen.
Sub MsgBoxPromptTitle_NewLine()
MsgBox "Schritt 1 abgeschlossen." & vbNewLine & "Klicken Sie auf OK, um Schritt 2 auszuführen.", , "Schritt 1 von 5"
End Sub
Beachten Sie, dass wir das Symbol & verwenden, um Texte miteinander zu verbinden. Weitere Informationen zur Verwendung von & mit Text und anderen Optionen zum Einfügen von Zeilenumbrüchen finden Sie in unserem Artikel über das Verbinden von Text.
MsgBox Icons
VBA bietet Ihnen die Möglichkeit, eines von vier vorgefertigten Icons zu Ihren Meldungsfeldern hinzuzufügen:
Icon Konstante | Icon |
---|---|
vbInformation | |
vbCritical | |
vbQuestion | |
vbExclamation |
Die Icon-Konstante sollte im Argument der Schaltfläche (buttons) platziert werden:
Sub MsgBoxQuestionIcon()
MsgBox "Frage Beispiel", vbQuestion
End Sub
Dieser Code generiert ein Standard Meldungsfeld mit OK-Schaltfläche und einem Fragezeichen-Symbol:
Beachten Sie, dass der VBA-Editor Ihnen bei der Eingabe die verfügbaren Optionen anzeigt:
Dies ist hilfreich, weil Sie sich nicht an die genaue Syntax oder die Namen der Symbole und Schaltflächen erinnern müssen.
Im Folgenden werden sämtliche Symbole für Nachrichtenfelder gezeigt:
MsgBox-Symbole – Informationen
Sub MsgBoxInformationIcon()
MsgBox "Information Beispiel", vbInformation
End Sub
MsgBox-Symbole – Kritisch
Sub MsgBoxCriticalIcon()
MsgBox "Kritisch Beispiel", vbCritical
End Sub
MsgBox Icons – Frage
Sub MsgBoxQuestionIcon()
MsgBox "Frage Beispiel", vbQuestion
End Sub
MsgBox-Symbole – Ausruf
Sub MsgBoxExclamationIcon()
MsgBox "Ausruf-Beispiel", vbExclamation
End Sub
Es folgt ein Beispiel zur Erstellung von Meldungsfeldern mit verschiedenen Schaltflächenlayouts. Wenn Sie einen anderen Messagebox-Typ wählen, müssen Sie den Icon-Typ mit einem „+“ hinter dem Befehl für die Schaltflächen hängen:
Sub MsgBoxQuestionIcon()
MsgBox "Möchten Sie fortfahren?", vbOKCancel + vbQuestion
End Sub
MsgBox-Variablen
Bisher haben wir hauptsächlich mit dem Standard Meldungsfeld „OK“ gearbeitet. Das OK-Meldungsfeld stellt nur eine Auswahlmöglichkeit zur Verfügung: Wenn Sie auf „OK“ klicken, wird der Code fortgesetzt. Sie können Ihrem Benutzer jedoch auch andere Schaltflächengruppierungen zur Verfügung stellen: OK / Abbrechen, Ja / Nein, usw.
In diesen Fällen ist das Ziel für jede Auswahl durch den Nutzer, eine jeweils andere Aktion ausführen zu lassen. Schauen wir uns ein Beispiel an.
Hier ist das Nachrichtenfeld, das wir erzeugen möchten:
Dies ist der gesamte Code (brechen wir ihn herunter):
Sub MsgBoxVariable()
Dim Antwort As Integer
Antwort = MsgBox("Möchten Sie fortfahren?", vbQuestion + vbYesNo)
If Antwort = vbYes Then
MsgBox "Ja"
Else
MsgBox "Nein"
End If
End Sub
Zunächst weisen wir die Ausgabe der Messagebox einer Integer-Variablen zu.
Dim Antwort As Integer
Antwort = MsgBox("Möchten Sie fortfahren?", vbQuestion + vbYesNo)
Als Nächstes verwenden wir eine If-Else-Verzweigung, um zu bestimmen, was bei jeder Schaltflächen-betätigung passieren soll:
If Antwort = vbYes Then
MsgBox "Ja"
Else
MsgBox "Nein"
Ende Wenn
Die Funktion MsgBox gibt einen Integer-Wert (zwischen 1-7) zurück, also definieren wir die Variable als Integer-Typ. Anstatt auf die Ganzzahl zu verweisen, können Sie jedoch auch auf eine Konstante verweisen (z. B. vbOK, vbCancel, usw.). In der folgenden Tabelle finden Sie alle Optionen:
Schaltfläche | Konstante | Wert |
---|---|---|
OK | vbOK | 1 |
Abbrechen | vbCancel | 2 |
Beenden | vbAbort | 3 |
Wiederholen | vbRetry | 4 |
Ignorieren | vbIgnore | 5 |
Ja | vbYes | 6 |
Nein | vbNo | 7 |
Sowohl für die Konstante vbCancel als auch vbAbort werden die Schaltflächen in der deutschen Version von MS Excel beide Male mit „Abbrechen“ übersetzt. Um die Zuordnung zu erleichtern, wird in diesem Artikel die Schaltfläche, der die Konstante vbAbort zugeordnet ist, mit „Beenden“ übersetzt. Die Bildausschnitte werden jedoch entsprechend der Realität mit „Abbrechen“ beschriftet bleiben.
Im Folgenden werden alle möglichen Schaltflächengruppierungen vorgestellt:
OK Meldungsfeld – vbOKOnly
Dies ist die Standard VBA Meldungsbox.
Sub MsgBox_OKOnly()
Dim Antwort As Integer
Antwort = MsgBox("OK Only Beispiel", vbOKOnly)
End Sub
OK Abbruch Meldungsfeld – vbOKCancel
Sub MsgBox_OKCancel()
Dim Antwort As Integer
Antwort = MsgBox("OK Abbrechen Beispiel", vbOKCancel)
If Antwort = vbOK Then
MsgBox "OK"
Else
MsgBox "Abbrechen"
End If
End Sub
Ja Nein Meldungsfeld – vbYesNo
Sub MsgBox_JaNein()
Dim Antwort As Integer
Antwort = MsgBox("Ja Nein Beispiel", vbYesNo)
If Antwort = vbYes Then
MsgBox "Ja"
Else
MsgBox "Nein"
End If
End Sub
Ja Nein Abbruch Meldungsfeld – vbYesNoCancel
Sub MsgBox_JaNeinAbbrechen()
Dim Antwort As Integer
Antwort = MsgBox("Ja Nein Abbruch Beispiel", vbYesNoCancel)
If Antwort = vbYes Then
MsgBox "Ja"
ElseIf Antwort = vbNo Then
MsgBox "Nein"
Else
MsgBox "Abbruch"
End If
End Sub
Beenden Wiederholen Ignorieren Meldung – vbAbortRetryIgnore
Der Schaltfläche „Abbrechen“ ist die Konstante vbAbort zugeordnet. Siehe Tabelle oben.
Sub MsgBox_AbortRetryIgnore()
Dim Antwort As Integer
Antwort = MsgBox("Beenden Wiederholen Ignorieren Beispiel", vbAbortRetryIgnore)
If Antwort = vbAbort Then
MsgBox "Beenden (Abbrechen)"
ElseIf Antwort = vbRetry Then
MsgBox "Wiederholen"
Else
MsgBox "Ignorieren"
End If
End Sub
Wiederholen Abbrechen Meldungsfeld – vbRetryCancel
Sub MsgBox_RetryCancel()
Dim Antwort As Integer
Antwort = MsgBox("Wiederholen Abbrechen Beispiel", vbRetryCancel)
If Antwort = vbRetry Then
MsgBox "Wiederholung"
Else
MsgBox "Abbrechen"
End If
End Sub
VBA MessageBox Beispiele
MessageBox Bestätigung vor der Ausführung eines Makros
Mit diesem Code wird vor dem Aufruf eines Makros ein Ja-Nein-Meldungsfeld angezeigt. Wenn Ja angeklickt wird, wird das Makro aufgerufen, wenn Nein angeklickt wird, wird das Makro nicht ausgeführt.
Sub Msgbox_BeforeRunning()
Dim Antwort As Integer
Antwort = MsgBox("Möchten Sie Makro1 ausführen?", vbQuestion + vbYesNo)
If Antwort = vbYes Then Call Makro1
End Sub
Ja / Nein Meldungsfeld – Exit Sub
Hier lassen wir den Benutzer bestätigen, ob mit der Ausführung eines Makros fortgefahren werden soll. Wenn Nein angeklickt wird, verlässt der Code die Sub, andernfalls wird die Prozedur fortgesetzt.
Sub Msgbox_BeforeRunning()
Dim Antwort As Integer
Antwort = MsgBox("Möchten Sie fortfahren?", vbQuestion + vbYesNo)
If Antwort = vbNo Then Exit Sub
'Beliebiger Code
End Sub
VBA-Meldungsfeld in Access VBA
Alle oben genannten Beispiele funktionieren in Access VBA genau so wie in Excel VBA.