🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA MsgBox in Excel — Ja/Nein, Schaltflächen & die Klammer-Regel

|

VBA MsgBox in Excel — Ja/Nein, Schaltflächen & die Klammer-Regel

Getestet mit: Excel 365 v2509 · Excel 2021 · Excel 2019 · zuletzt geprüft am 06.06.2026

Kurz gesagtMsgBox zeigt dem Nutzer eine kurze Meldung und ein paar Schaltflächen und sagt Ihnen dann, welche geklickt wurde. Zwei Verwendungen — etwas mitteilen und eine Ja/Nein-Frage stellen:

Sub MsgBoxGrundlagen()
    ' 1. Mitteilen — zeigen und vergessen (eine Anweisung, KEINE Klammern)
    MsgBox "Import abgeschlossen.", vbInformation, "Fertig"

    ' 2. Fragen — die Antwort auswerten (eine Funktion, Klammern NÖTIG)
    Dim antwort As VbMsgBoxResult
    antwort = MsgBox("Markierte Zeile löschen?", vbYesNo + vbQuestion, "Bestätigen")

    If antwort = vbYes Then
        Selection.EntireRow.Delete
    End If
End Sub

Genau dieser eine Unterschied — Klammern oder keine — steckt hinter fast jedem „Expected: end of statement", das Leute mit MsgBox erleben. Der Rest dieser Anleitung dreht sich darum.

Das Denkmodell: MsgBox ist eine Sprechanlage, keine Tastatur

Stellen Sie sich eine Sprechanlage an der Wand vor. Sie können eine Zeile an alle Zuhörenden durchsagen und ihnen ein paar Schaltflächen zum Antworten anbieten — Ja, Nein, Abbrechen, Wiederholen. Was Sie nicht können: hören, wie sie einen ganzen Satz tippen. Sobald Sie freie Eingabe brauchen — einen Dateinamen, eine Zahl, ein Datum — sind Sie über MsgBox hinausgewachsen und wollen InputBox oder ein UserForm.

MsgBox erledigt also genau zwei Dinge gut: dem Nutzer etwas mitteilen oder eine geschlossene Frage stellen und auf den Klick verzweigen. Bleiben Sie dabei, und es macht nie Ärger.

Die eine Regel: Anweisungsform gegen Funktionsform

MsgBox hat zwei Gesichter, und welches Sie nutzen, entscheidet, ob Klammern erlaubt sind.

Anweisungsform — Sie wollen die Meldung nur zeigen und kümmern sich nicht um den Klick:

MsgBox "Gespeichert!"                       ' ✅
MsgBox "Gespeichert!", vbInformation, "Status" ' ✅ Argumente mit Komma getrennt, KEINE Klammern
MsgBox ("Gespeichert!", vbInformation)      ' ❌ Expected: end of statement

Die letzte Zeile scheitert, weil VBA ( … ) nach einer Anweisung als „werte diesen einen Ausdruck aus" liest — und "Gespeichert!", vbInformation ist kein einzelner Ausdruck, sondern eine Argumentliste. Klammern gehören nur an einen Funktionsaufruf.

Funktionsform — Sie wollen den Rückgabewert, also weisen Sie ihn zu, und jetzt sind Klammern Pflicht:

Dim r As VbMsgBoxResult
r = MsgBox("Datei überschreiben?", vbYesNo)   ' ✅ Rückgabewert genutzt → Klammern nötig

Die Regel in einem Satz: Rückgabewert genutzt → Klammern; ignoriert → keine Klammern. Verinnerlichen Sie das, und der Fehler verschwindet für immer.

Die Antwort über den Namen lesen, nie über die Zahl

MsgBox gibt eine Ganzzahl zurück, aber vergleichen Sie nie mit einer rohen Zahl. vbYes ist zufällig 6 — schreiben Sie vbYes, nicht 6. Die benannten Konstanten lesen sich wie Klartext und überstehen jeden, der das Makro liest (auch Sie selbst, später):

Select Case MsgBox("Änderungen vor dem Schließen speichern?", vbYesNoCancel + vbExclamation)
    Case vbYes:    ThisWorkbook.Save
    Case vbNo:     ' ohne Speichern schließen — nichts tun
    Case vbCancel: Exit Sub          ' Nutzer rudert zurück → ganzes Makro stoppen
End Select

Dieses dreiteilige vbYesNoCancel ist das Muster zum Merken: Abbrechen = „Ich habe es mir anders überlegt, stopp alles." Ehren Sie das mit Exit Sub, und Ihre Nutzer vertrauen dem Makro.

Schaltflächen und Symbole kombiniert man mit +

Das zweite Argument packt zwei unabhängige Entscheidungen — welche Schaltflächen und welches Symbol — in eine Zahl, also addiert man sie:

MsgBox "Festplatte fast voll.", vbOKOnly + vbCritical            ' rotes ✖ Symbol
MsgBox "Nachtlauf jetzt starten?", vbYesNo + vbQuestion          ' blaues ? Symbol
MsgBox "Netzwerkfehler — wiederholen?", vbRetryCancel + vbExclamation ' gelbes ! Symbol

Sie liegen in verschiedenen „Fächern" der Zahl, weshalb + sauber funktioniert. Eine andere als die Standard-Schaltfläche hervorheben (damit ein achtloses Enter nichts löscht)? Fügen Sie vbDefaultButton2 hinzu, um die zweite Schaltfläche zum Standard zu machen.

Eine Variable in die Meldung einbauen

Ein konstanter Text ist in echten Makros selten — fast immer wollen Sie eine Anzahl, einen Namen, ein Ergebnis melden. Verketten mit &, und vbNewLine für einen Zeilenumbruch:

Dim n As Long
n = WorksheetFunction.CountA(Range("A:A")) - 1
MsgBox "Verarbeitet: " & n & " Zeilen." & vbNewLine & _
       "Fertig um " & Format(Now, "hh:mm:ss"), vbInformation, "Bericht"

Das & (nicht +) zum Verbinden von Text und vbNewLine für den Umbruch sind die zwei Dinge, die am häufigsten vergessen werden.

MsgBox nicht zum Debuggen nutzen

Der häufigste Missbrauch: MsgBox x durch eine Schleife streuen, um „den Wert zu sehen". Bei 500 Zeilen sind das 500 Klicks — und das Makro friert bei jedem ein. MsgBox ist modal: Es blockiert bis zum Klick, absichtlich, weil es einen Menschen zum Innehalten und Entscheiden bringen soll.

Zum Beobachten von Werten beim Entwickeln nutzen Sie stattdessen das Direktfenster:

Debug.Print "Zeile " & i & " = " & zelle.Value   ' Strg+G zum Lesen, null Klicks, kein Blockieren

Faustregel: MsgBox ist ein Entscheidungstor für den Endnutzer; Debug.Print ist das Ausgabewerkzeug des Entwicklers. Beides zu verwechseln macht Makros unbeholfen.

Häufige MsgBox-Fehler (und die Lösung)

Symptom Ursache Lösung
„Expected: end of statement" Klammern an der Anweisungsform: MsgBox ("Hi", vbYesNo) Klammern weglassen oder Ergebnis zuweisen: r = MsgBox("Hi", vbYesNo)
Antwort passt nie Vergleich mit Magiezahlen 6 / 7 Mit Konstanten vbYes / vbNo vergleichen
Makro läuft nach Abbrechen weiter Nur vbYes geprüft, vbCancel ignoriert Case vbCancel: Exit Sub ergänzen
Titel steht an falscher Stelle Argumentreihenfolge ist prompt, buttons, title Titel ist das dritte Argument: MsgBox "Text", vbOKOnly, "Titel"
Text und Zahl kleben zusammen Mit + verbunden, was addiert oder Fehler wirft Mit & verbinden: "Gesamt " & n
Schaltflächen + Symbol erscheinen nicht beide Komma dazwischen genutzt Mit + kombinieren: vbYesNo + vbQuestion

Sparen Sie sich das Dialog-Gerüst — beschreiben Sie einfach die Regel

Eine MsgBox-Rückfrage ist für eine Entscheidung gut. Wird aber die Logik dahinter zur eigentlichen Arbeit — „vor dem Löschen prüfen, ob Spalte D leer ist und das Datum in der Vergangenheit liegt" —, dann steckt dort der Aufwand. ExcelMaster Agent lässt Sie die Regel in klarem Deutsch sagen — „lösche Zeilen, deren Status leer ist und deren Fälligkeitsdatum vergangen ist, aber frag mich vorher" — und schreibt den Wächter, die Rückfrage und das Löschen für Sie. Kostenlos testen →

Weitere Anleitungen

FAQ

Was ist MsgBox in VBA? MsgBox ist eine eingebaute VBA-Funktion, die ein kleines Dialogfenster mit einer Meldung und einer oder mehreren Schaltflächen zeigt und dann einen Wert zurückgibt, der sagt, welche Schaltfläche geklickt wurde. Nutzen Sie es, um den Nutzer zu informieren oder eine einfache Ja/Nein-Frage zu stellen.

Warum kommt „Expected: end of statement" bei MsgBox? Weil Sie die Argumente in Klammern gesetzt haben, während Sie MsgBox als Anweisung nutzen, z. B. MsgBox ("Hi", vbYesNo). Klammern sind nur erlaubt, wenn Sie den Rückgabewert auswerten: antwort = MsgBox("Hi", vbYesNo). Ohne Rückgabewert lassen Sie die Klammern weg: MsgBox "Hi", vbYesNo.

Wie erstelle ich ein Ja/Nein-Meldungsfenster in VBA? Rufen Sie MsgBox als Funktion mit der Konstante vbYesNo auf und lesen Sie das Ergebnis: If MsgBox("Weiter?", vbYesNo) = vbYes Then …. Für das Fragezeichen-Symbol vbQuestion ergänzen: vbYesNo + vbQuestion.

Wie zeige ich ein Symbol in einer VBA-MsgBox? Addieren Sie eine Symbol-Konstante mit + zum Schaltflächen-Argument: vbCritical (rotes ✖), vbExclamation (gelbes !), vbQuestion (blaues ?) oder vbInformation (blaues i). Beispiel: MsgBox "Fertig", vbOKOnly + vbInformation.

Wie baue ich eine Variable in eine MsgBox ein? Verbinden Sie Text und Variable mit &: MsgBox "Gesamt: " & gesamt. Mit vbNewLine beginnen Sie eine neue Zeile in der Meldung.

Was ist der Unterschied zwischen MsgBox und InputBox? MsgBox gibt nur eine Meldung aus und liefert zurück, welche Schaltfläche geklickt wurde — es kann keinen getippten Text annehmen. InputBox fordert den Nutzer zur Eingabe eines Werts auf und gibt das Getippte zurück. Nutzen Sie MsgBox zum Informieren oder Bestätigen, InputBox zum Erfassen von Eingaben.