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

VBA InputBox in Excel — die zwei InputBoxen & wann welche

|

VBA InputBox in Excel — die zwei InputBoxen & wann welche

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

Kurz gesagt — Excel kennt zwei Funktionen namens InputBox. Die einfache gibt Text zurück; die von Excel kann eine Zahl, ein Datum oder sogar einen vom Nutzer mit der Maus markierten Bereich verlangen:

' 1. VBA InputBox — gibt immer einen String zurück
Dim name As String
name = InputBox("Ihr Name?", "Einrichtung")

' 2. Application.InputBox — Type:=1 erzwingt eine Zahl, Type:=8 holt einen Bereich
Dim menge As Variant
menge = Application.InputBox("Wie viele?", "Menge", Type:=1)

Dim bereich As Range
On Error Resume Next
Set bereich = Application.InputBox("Daten auswählen:", "Bereich", Type:=8)
On Error GoTo 0

Die falsche zu wählen ist der Grund, warum so viele InputBox-Makros eine handgeschriebene Prüfschleife haben, die sie gar nicht brauchen. So treffen Sie die richtige Wahl.

Das Denkmodell: gleicher Name, zwei verschiedene Werkzeuge

Tippen Sie InputBox im Editor, bietet VBA es zweimal an — das ist kein Fehler. Es gibt sie wirklich zweimal:

  • InputBox(...) — die VBA-Sprachfunktion. Kinderleicht, läuft in jeder Office-Anwendung und gibt immer einen String zurück. Was der Nutzer tippt, kommt als Text.
  • Application.InputBox(...) — eine nur in Excel verfügbare Methode mit einem Extra-Trumpf: einem Type-Argument. Sie kann auf einer Zahl, einem Datum, einem Wahrheitswert oder einem Zellbereich bestehen und gibt diesen typisierten Wert zurück — keinen String, den Sie erst umwandeln müssen.

Ist MsgBox die Sprechanlage, die nur durchsagt, dann ist InputBox die eine Stelle, an der ein schnelles Makro einen einzelnen getippten Wert empfangen kann, ohne ein ganzes UserForm zu bauen. Nehmen Sie die einfache für freien Text; nehmen Sie Application.InputBox, sobald die Antwort eine Zahl, ein Datum oder ein Bereich sein soll.

Auswahl nach der gewünschten Antwort

' Freier Text → die einfache InputBox ist am kürzesten
Dim notiz As String
notiz = InputBox("Kommentar hinzufügen:")

' Eine Zahl, mit der Sie rechnen → Application.InputBox Type:=1
Dim satz As Variant
satz = Application.InputBox("Zinssatz %:", Type:=1)

' Ein Zellbereich, auf den der Nutzer mit der Maus zeigt → Type:=8 (das Killer-Feature)
Dim ziel As Range
On Error Resume Next
Set ziel = Application.InputBox("Zu summierende Zellen wählen:", Type:=8)
On Error GoTo 0

Dieser Type:=8-Bereichswähler ist das Einzige, was kein anderer leichter Dialog kann — der Nutzer zieht über das Blatt, und Sie bekommen ein echtes Range-Objekt zurück. Nur um einen Bereich zu greifen ein UserForm mit RefEdit-Steuerelement zu bauen, ist übertrieben, wenn es das gibt.

Die wichtigsten Type-Werte

Type Akzeptiert Liefert
1 Eine Zahl die Zahl (Double)
2 Text einen String
4 Einen Wahrheitswert True / False
8 Einen Zellbezug ein Range (mit Set)
0 Eine Formel die Formel als Text

Sie lassen sich für „entweder/oder" addieren — Type:=1 + 2 akzeptiert eine Zahl oder Text. Der Sinn von Type ist, dass Excel die Eingabe für Sie prüft: Tippen Sie Buchstaben in ein Type:=1-Feld, lehnt Excel sie ab, bevor Ihr Code überhaupt läuft. Genau die Prüfschleife, die Sie schreiben wollten — schon eingebaut.

Die Falle, die beide bricht: Abbrechen erkennen

Hier stecken die meisten InputBox-Fehler, und es ist je nach Version anders.

Die einfache InputBox gibt bei Klick auf Abbrechen einen leeren String "" zurück — und auch dann, wenn der Nutzer das Feld leer lässt und OK klickt. Sie können beides nicht unterscheiden:

Dim s As String
s = InputBox("Code eingeben:")
If s = "" Then Exit Sub      ' behandelt Abbrechen und „leeres OK" gleich — meist in Ordnung

Application.InputBox gibt bei Abbrechen den Wahrheitswert False zurück. Der Haken: Sie müssen das vor der Zuweisung an eine typisierte Variable abfangen, also erst in einer Variant speichern:

Dim v As Variant
v = Application.InputBox("Wie viele Zeilen?", Type:=1)
If VarType(v) = vbBoolean Then Exit Sub    ' Nutzer hat abgebrochen
' jetzt sicher als Zahl nutzbar
Range("B1").Value = v

⚠️ Schreiben Sie hier nicht If v = False Then Exit Sub. Gibt der Nutzer legitim 0 ein, ist v = False ebenfalls wahr (VBA behandelt 0 als False), und Ihr Makro bricht bei gültiger Eingabe ab. VarType(v) = vbBoolean zu prüfen ist die einzig verlässliche Methode — eine echte Zahl kommt als vbDouble zurück, nie als vbBoolean. Für einen Type:=8-Bereich nehmen Sie stattdessen das Is Nothing-Muster aus dem Kurz-gesagt-Block.

Hören Sie auf, Prüfschleifen von Hand zu bauen

Da Application.InputBox den Typ schon erzwingt, ist die klassische „immer wieder fragen, bis eine gültige Zahl kommt"-Schleife meist überflüssiger Code:

' ❌ Die Schleife, die man mit der einfachen InputBox schreibt
Dim s As String
Do
    s = InputBox("Eine Zahl eingeben:")
Loop Until IsNumeric(s) And s <> ""

' ✅ Excel erzwingen lassen
Dim n As Variant
n = Application.InputBox("Eine Zahl eingeben:", Type:=1)
If VarType(n) = vbBoolean Then Exit Sub

Faustregel: Wenn Sie die Art des Werts prüfen, haben Sie die falsche InputBox gewählt — wechseln Sie zu Application.InputBox mit dem passenden Type. Die Prüfung der Bedeutung (im Bereich? schon vorhanden?) bleibt Ihre Aufgabe.

Wann InputBox das falsche Werkzeug wird

Ein Wert, zur Not zwei — InputBox-Ketten sind in Ordnung. Darüber hinaus zerfallen sie: Fragen Sie fünf Dinge nacheinander ab, hat der Nutzer, der bei Frage zwei patzt, keinen Weg zurück, keine Übersicht, kein „alles abbrechen". Das ist das Signal, zu einem UserForm aufzusteigen, wo alle Felder zugleich sichtbar und bis zum OK änderbar sind. Greifen Sie nicht früher danach als nötig — drei einfache Textfelder ohne Prüfung sind als drei InputBoxen bestens aufgehoben.

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

Symptom Ursache Lösung
Makro bricht bei gültiger 0 ab If v = False nach Type:=1 (0 = False) Stattdessen VarType(v) = vbBoolean prüfen
„Typen unverträglich" bei Bereichswahl Dim r As Range nimmt ein Abbrechen (False) On Error Resume Next + If r Is Nothing
Zahl kommt als Text zurück Einfache InputBox (immer String) genutzt Application.InputBox mit Type:=1
Bereichswähler erscheint nicht InputBox(...) statt Application.InputBox(...) Nur die Application.-Version hat Type:=8
Abbrechen und Leereingabe nicht unterscheidbar Einfache InputBox gibt für beide "" zurück Auf Application.InputBox wechseln (gibt bei Abbrechen False)
Vorgabetext erscheint nicht Im falschen Argument platziert InputBox(prompt, titel, vorgabe) — Vorgabe ist das 3.

Eine Abfrage ist leicht — die Logik danach nicht

Eine Zahl oder einen Bereich per InputBox zu greifen, ist der einfache Teil. Die Arbeit ist, was danach passiert — „summiere für den gewählten Bereich jede Spalte, überspringe Leerzellen und markiere alles über dem Durchschnitt." ExcelMaster Agent lässt Sie diesen ganzen Vorgang in klarem Deutsch beschreiben und schreibt das Makro — Abfrage, Bereichsbehandlung und alles. Kostenlos testen →

Weitere Anleitungen

FAQ

Was ist eine InputBox in VBA? Eine InputBox ist ein Dialog, der den Nutzer zur Eingabe eines Werts auffordert und ihn an Ihr Makro zurückgibt. VBA hat tatsächlich zwei: die einfache InputBox-Funktion (gibt immer einen String zurück) und Application.InputBox (nur in Excel, mit einem Type-Argument, das eine Zahl, ein Datum oder einen Bereich liefern kann).

Was ist der Unterschied zwischen InputBox und Application.InputBox? InputBox gibt immer Text zurück, läuft in jeder Office-Anwendung und ist die kürzeste Variante. Application.InputBox gibt es nur in Excel und ergänzt ein Type-Argument, sodass sie eine Zahl (Type:=1), einen mit der Maus markierten Bereich (Type:=8) und mehr erzwingen und zurückgeben kann. Bei Abbrechen gibt sie False zurück.

Wie hole ich eine Zahl aus einer VBA-InputBox? Nutzen Sie Application.InputBox("Text", Type:=1) und speichern Sie das Ergebnis in einer Variant. Excel weist nichtnumerische Eingaben automatisch ab. Prüfen Sie auf Abbrechen mit If VarType(v) = vbBoolean Then Exit Sub, bevor Sie die Zahl verwenden.

Wie erkenne ich Abbrechen in einer VBA-InputBox? Die einfache InputBox gibt bei Abbrechen einen leeren String "" zurück (nicht von einem leeren OK zu unterscheiden). Application.InputBox gibt False zurück; speichern Sie es in einer Variant und prüfen Sie VarType(v) = vbBoolean. Für einen Bereich (Type:=8) umschließen Sie den Aufruf mit On Error Resume Next und prüfen If bereich Is Nothing.

Wie lasse ich den Nutzer mit InputBox einen Bereich auswählen? Nutzen Sie Application.InputBox("Zellen wählen:", Type:=8) und weisen Sie mit Set zu. Umschließen Sie den Aufruf mit On Error Resume Next … On Error GoTo 0, damit ein Abbrechen keinen Typfehler auslöst, und prüfen Sie dann If bereich Is Nothing Then Exit Sub.