Lektionen/Werkzeugkasten

MsgBox & InputBox richtig nutzen

Einsteiger8 Min. Lesezeit

MsgBox und InputBox sind die schnellsten Wege, um mit dem Benutzer zu reden: eine Meldung anzeigen, eine Ja/Nein-Frage stellen, einen Wert abfragen. Beide sind in wenigen Sekunden eingebaut – aber es lohnt sich, sie richtig zu benutzen, statt nur MsgBox "Fertig" zu tippen. In dieser Lektion lernst du Buttons, Icons, die Auswertung der Antwort und wann du besser ein eigenes Formular nimmst.

MsgBox in zwei Rollen

MsgBox gibt es in zwei Formen. Als Anweisung zeigt sie nur etwas an – die Antwort interessiert dich nicht:

MsgBox "Der Export ist abgeschlossen."

Als Funktion (mit Klammern) liefert sie zurück, welchen Button der Benutzer geklickt hat. Diese Form brauchst du für Rückfragen:

Dim antwort As VbMsgBoxResult
antwort = MsgBox("Datensatz wirklich löschen?", vbYesNo)

Buttons und Icons kombinieren

Der zweite Parameter steuert Buttons und Symbol. Du kombinierst die Konstanten mit + oder Or. Die wichtigsten Button-Konstanten:

KonstanteAngezeigte Schaltflächen
vbOKOnlyOK (Standard)
vbOKCancelOK, Abbrechen
vbYesNoJa, Nein
vbYesNoCancelJa, Nein, Abbrechen
vbRetryCancelWiederholen, Abbrechen

Und die Icon-Konstanten:

KonstanteSymbolEinsatz
vbInformationblaues „i"reine Information
vbQuestionFragezeichenRückfrage
vbExclamationgelbes WarndreieckWarnung
vbCriticalrotes KreuzFehler
' Löschbestätigung mit Frage-Icon
MsgBox "Datensatz löschen?", vbYesNo + vbQuestion

' Fehlermeldung mit rotem Symbol
MsgBox "Die Datei wurde nicht gefunden.", vbCritical

Mit vbDefaultButton2 machst du den zweiten Button zum Standard (fokussiert). Bei gefährlichen Aktionen ist das sinnvoll, damit ein versehentliches Enter nicht sofort löscht:

MsgBox "Wirklich alles löschen?", vbYesNo + vbCritical + vbDefaultButton2

Die Antwort auswerten

Der Rückgabewert ist eine der vbMsgBoxResult-Konstanten. Vergleiche direkt damit – nicht mit Zahlen:

If MsgBox("Datensatz löschen?", vbYesNo + vbQuestion) = vbYes Then
    ' Löschen ausführen
    DoCmd.RunCommand acCmdDeleteRecord
End If

Die möglichen Rückgaben:

RückgabeGeklickter Button
vbOKOK
vbCancelAbbrechen (auch bei Esc)
vbYesJa
vbNoNein
vbRetryWiederholen

Bei drei Schaltflächen prüfst du mit Select Case:

Select Case MsgBox("Änderungen speichern?", vbYesNoCancel + vbQuestion)
    Case vbYes
        SpeichereDaten
    Case vbNo
        ' verwerfen, aber weitermachen
    Case vbCancel
        Exit Sub            ' Vorgang ganz abbrechen
End Select

Titel und mehrzeilige Texte

Der dritte Parameter setzt den Fenstertitel. Ohne ihn steht dort „Microsoft Access":

MsgBox "Import erfolgreich.", vbInformation, "Datenimport"

Längere Meldungen zerlegst du mit vbCrLf in mehrere Zeilen. Für Absätze nutzt du zwei davon:

Dim text As String
text = "Der Import ist abgeschlossen." & vbCrLf & vbCrLf
text = text & "Neue Datensätze: 128" & vbCrLf
text = text & "Übersprungen:     3"
MsgBox text, vbInformation, "Ergebnis"

vbCrLf ist die Kombination aus Wagenrücklauf und Zeilenvorschub. vbNewLine funktioniert genauso; vbTab fügt einen Tabulator ein, wenn du Werte ausrichten willst.

InputBox: einen Wert abfragen

InputBox fragt eine Texteingabe ab und gibt sie als String zurück:

Dim name As String
name = InputBox("Wie heißt der neue Kunde?", "Neuanlage")

Der zweite Parameter ist der Titel, der dritte ein Vorgabewert im Eingabefeld:

Dim jahr As String
jahr = InputBox("Für welches Jahr?", "Auswertung", Year(Date))

Die Abbruch-Falle bei InputBox

Hier liegt der häufigste Fehler: InputBox gibt einen leeren String "" zurück, wenn der Benutzer auf Abbrechen klickt oder das Feld leer lässt und OK drückt. Du kannst beides an der Rückgabe allein nicht sicher unterscheiden. Prüfe das Ergebnis immer, bevor du weiterarbeitest:

Dim eingabe As String
eingabe = InputBox("Bitte Kundennummer eingeben:", "Suche")

If Len(eingabe) = 0 Then
    ' Abbruch oder leere Eingabe – nichts tun
    Exit Sub
End If

If Not IsNumeric(eingabe) Then
    MsgBox "Bitte eine Zahl eingeben.", vbExclamation
    Exit Sub
End If

Achtung: Weil InputBox immer Text liefert, musst du bei Zahlen selbst mit IsNumeric prüfen und mit CLng/CDbl konvertieren. Und du kannst die Eingabe nicht wirklich validieren, während sie stattfindet – erst nach dem Schließen.

Die Grenzen von MsgBox und InputBox

Beide sind praktisch, aber schnell am Limit:

  • Nur ein Eingabefeld. Für mehrere Werte müsstest du mehrere InputBox nacheinander aufrufen – umständlich und leicht abzubrechen.
  • Keine Validierung während der Eingabe, keine Auswahllisten, keine Kalender.
  • Kein einheitliches Aussehen und keine Pflichtfeld-Logik.
  • Der Code blockiert, bis der Dialog geschlossen wird.

Sobald du mehr als eine Ja/Nein-Frage oder einen einzelnen Wert brauchst, ist ein eigenes Access-Formular die bessere Wahl. Öffne es modal mit DoCmd.OpenForm "frmDialog", , , , , acDialog – der Code wartet dann genauso, bis das Formular geschlossen ist, aber du hast volle Kontrolle über Felder, Comboboxen, Validierung und Layout. MsgBox und InputBox bleiben für kurze Rückfragen und schnelle Meldungen erste Wahl; alles Komplexere gehört ins Formular.

Zusammengefasst

  • MsgBox als Anweisung zeigt nur an; als Funktion mit Klammern liefert sie den geklickten Button zurück.
  • Buttons und Icons kombinierst du im zweiten Parameter (vbYesNo + vbQuestion); werte die Antwort gegen Konstanten wie vbYes aus, nicht gegen Zahlen.
  • Titel steht im dritten Parameter, mehrzeilige Texte baust du mit vbCrLf.
  • InputBox liefert "" sowohl bei Abbrechen als auch bei leerer Eingabe – immer mit Len(...) = 0 und IsNumeric prüfen.
  • Für alles jenseits einer einzelnen Frage oder eines Werts ist ein eigenes modales Formular (acDialog) die robustere Lösung.
Nächste Lektion
Reguläre Ausdrücke in VBA