Kurzfassung — Eine TextBox speichert nur eine Art von Inhalt: Text.
TextBox1.Valueliefert Ihnen immer eineStringzurück, selbst wenn der Nutzer42oder ein Datum eingegeben hat. Das ist die Quelle fast jedes TextBox-Fehlers — Rechnen mit Text, oder eine Zahl, die mit einer Zeichenfolge verglichen wird. Bevor Sie rechnen, prüfen Sie mitIsNumericund wandeln Sie mitCDbloderCLngum..Textund.Valuesind bei einer TextBox nahezu dasselbe; eine leere Box ist"", nicht0.
Private Sub cmdAdd_Click()
' TextBox1.Value ist der STRING "10", nicht die Zahl 10:
If IsNumeric(TextBox1.Value) Then
Dim n As Double
n = CDbl(TextBox1.Value) ' jetzt ist es eine echte Zahl
MsgBox n + 5
Else
MsgBox "Please enter a number"
End If
End Sub
Eine TextBox ist das schlichteste Steuerelement auf einem UserForm — eine Box, in die der Nutzer tippt —, und sie sorgt aus genau einem Grund für die meiste Verwirrung. Sie gehört zur Steuerelement-Familie, die Sie über die Controls-Auflistung des Formulars erreichen: Wie jedes Steuerelement sprechen Sie eine TextBox über ihre Eigenschaften an. Aber wo eine CheckBox einen Boolean zurückliefert und eine ListBox das gewählte Element, liefert eine TextBox etwas trügerisch Einfaches zurück — eine Zeichenfolge —, und genau diese Zeichenfolge wie die Zahl zu behandeln, der sie ähnelt, ist der Fehler Nummer eins bei der TextBox.
Was Sie lernen
- Warum
TextBox1.Valueimmer einStringist, egal wie er aussieht - Die zwei verschiedenen Arten, wie Rechnen mit
.Valueschiefgeht - Sicher umwandeln mit
IsNumeric, dannCDbloderCLng - Der kleine Unterschied zwischen
.Textund.Value - Warum eine leere Box
""ist und nicht0, und wie Sie das prüfen - Reagieren, während der Nutzer tippt, mit den Ereignissen
ChangeundExit
Das Denkmodell: eine TextBox liefert immer Text zurück
Eine TextBox enthält Zeichen, sonst nichts. Tippt der Nutzer 42, enthält die Box die zwei Zeichen lange
Zeichenfolge "42", nicht die Zahl 42. Also ist TextBox1.Value ein String — jedes Mal, unabhängig davon,
wie er aussieht. Ein als 31/12/2026 eingetipptes Datum ist eine Zeichenfolge aus zehn Zeichen; ein Geldbetrag
1,250.00 ist eine Zeichenfolge mit einem Komma darin. VBA liest keine Absicht aus einer TextBox; es reicht
Ihnen die Zeichen und überlässt Ihnen die Bedeutung.
Diese eine Tatsache erklärt jede TextBox-Überraschung. Merken Sie sich nur eines: Was auch immer aus einer TextBox kommt, ist Text, bis Sie es umwandeln.
Die Zahlenfalle: Rechnen mit .Value geht auf zwei Arten schief
Weil .Value eine Zeichenfolge ist, ist Rechnen damit ein Münzwurf zwischen zwei Fehlschlägen:
' Angenommen, die Box enthaelt 10
MsgBox TextBox1.Value + 5 ' NICHT 15
Behandelt VBA + als Verkettung, bekommen Sie "105"; ist ein späterer Wert in der Box nicht numerisch,
bekommen Sie stattdessen Laufzeitfehler 13, « Type mismatch ». Derselbe Code, zwei verschiedene falsche
Ergebnisse, je nachdem, was der Nutzer getippt hat — genau die Art Bug, die Ihren Test besteht und in den Händen
des Nutzers scheitert. Die Lösung ist, niemals direkt mit .Value zu rechnen.
Sicher umwandeln: erst IsNumeric, dann CDbl oder CLng
Zwei Schritte, immer in dieser Reihenfolge. Fragen Sie zuerst mit IsNumeric, ob der Text eine Zahl ist; erst
dann wandeln Sie ihn um:
If IsNumeric(TextBox1.Value) Then
Dim price As Double
price = CDbl(TextBox1.Value) ' Zeichenfolge -> Double
Else
MsgBox "That is not a number"
TextBox1.SetFocus ' schickt den Nutzer zurueck, es zu korrigieren
End If
Verwenden Sie CDbl für alles mit Nachkommastellen (Preise, Sätze) und CLng für ganze Zahlen (Stückzahlen,
IDs). Lassen Sie die IsNumeric-Absicherung weg und rufen CDbl auf "abc" auf, löst das denselben Fehler
13 aus — die Absicherung ist also keine optionale Höflichkeit, sie ist es, was aus einem Absturz eine Meldung
macht. Das ist das TextBox-Äquivalent der Typsicherheit, die Sie in dem Moment aufgegeben haben, als der Wert zu
Text wurde.
.Text gegenüber .Value
Bei einer TextBox sind die beiden fast identisch, und .Value ist die Gewohnheitswahl. Der Unterschied, der
zählt: .Text ist immer die in der Box angezeigte Zeichenfolge, während .Value bei reichhaltigeren
Steuerelementen von anderen Eigenschaften beeinflusst werden kann. Bei einer schlichten TextBox liefern beide
dieselbe Zeichenfolge zurück. Bevorzugen Sie .Value zum Lesen von Daten, und greifen Sie nur dann zu .Text,
wenn Sie gezielt die angezeigten Zeichen brauchen — etwa in einem Change-Ereignis, bevor sich .Value gesetzt
hat.
Leer ist eine Zeichenfolge der Länge null, nicht null
Eine leere TextBox ist "" — eine Zeichenfolge der Länge null — nicht 0 und nicht Null. Prüfen Sie sie
also als Text:
If Trim(TextBox1.Value) = "" Then
MsgBox "This field is required"
Exit Sub
End If
Trim fängt auch eine Box ab, in die der Nutzer nur Leerzeichen getippt hat. Prüfen Sie nicht mit
If TextBox1.Value = 0 — das vergleicht eine Zeichenfolge mit einer Zahl und führt in die Irre. Weil leer eine
Zeichenfolge ist, ist eine Pflichtfeld-Prüfung ein Text-Test, kein numerischer — ein Unterschied, über den Leute
stolpern, die von der InputBox kommen, die ihre eigenen Regeln für Abbrechen gegenüber
Leer hat.
Reagieren, während der Nutzer tippt: die Ereignisse Change und Exit
Zwei Ereignisse decken die meiste Live-Validierung ab. Change feuert bei jedem Tastendruck — gut für eine
Live-Zeichenzählung oder das Freischalten einer OK-Schaltfläche, schlecht für aufwendige Arbeit. Exit feuert,
wenn der Nutzer die Box verlässt, und es kann das Verlassen abbrechen, um eine Korrektur zu erzwingen:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsNumeric(TextBox1.Value) Then
MsgBox "Enter a number before moving on"
Cancel = True ' Fokus in der Box behalten
End If
End Sub
Cancel = True in Exit zu setzen ist der saubere Weg, den Nutzer in einem Feld festzuhalten, bis es gültig
ist — weit besser, als einen schlechten Wert in den Rest des Formulars fließen zu lassen und später zu
scheitern. Verwenden Sie Change für billiges Feedback pro Tastendruck und Exit für die eigentliche
Validierung.
Wie ExcelMaster hilft
Der TextBox-Bug ist die Definition von « funktioniert auf meinem Rechner »: Die Box, die beim Testen immer eine
Zahl enthielt, enthält in der Produktion einen verirrten Buchstaben, und + 5 wird zu "105" oder Fehler 13. Er
bleibt still, bis genau die Eingabe eintrifft, die ihn bricht.
ExcelMaster lässt Sie sagen, was das Feld
bedeutet — « das ist ein Preis, lehne alles ab, was keine Zahl ist, und setze den Cursor zurück » — und es
schreibt die IsNumeric-Absicherung und die CDbl-Umwandlung, mit verdrahtetem Exit-Ereignis, sodass der
Schritt von Zeichenfolge zu Zahl nie übersprungen wird. Sie behalten das Formular und den Code.
Häufig gestellte Fragen
Ist der Wert einer VBA-TextBox immer eine Zeichenfolge?
Ja. Eine TextBox speichert Zeichen, sodass TextBox1.Value jedes Mal einen String zurückgibt, selbst wenn der
Nutzer Ziffern oder ein Datum getippt hat. VBA wandelt das nicht für Sie um. Um es als Zahl zu verwenden, müssen
Sie es selbst mit CDbl oder CLng umwandeln, nachdem Sie mit IsNumeric geprüft haben, dass es wirklich
numerisch ist.
Wie erhalte ich eine Zahl aus einer VBA-TextBox?
Erst absichern, dann umwandeln. Prüfen Sie IsNumeric(TextBox1.Value); besteht die Prüfung, rufen Sie
CDbl(TextBox1.Value) für eine Dezimalzahl oder CLng(TextBox1.Value) für eine ganze Zahl auf. CDbl auf
nicht-numerischen Text anzuwenden löst Laufzeitfehler 13 aus, die IsNumeric-Prüfung ist also das, was aus
einem Absturz eine freundliche Meldung macht.
Was ist der Unterschied zwischen .Text und .Value bei einer TextBox?
Bei einer schlichten TextBox liefern beide dieselbe Zeichenfolge zurück, und .Value ist die konventionelle
Wahl zum Lesen von Daten. .Text sind immer die aktuell angezeigten Zeichen; .Value kann bei reichhaltigeren
Steuerelementen abweichen. Verwenden Sie standardmäßig .Value und .Text nur dann, wenn Sie gezielt die
angezeigte Zeichenfolge brauchen, etwa in einem Change-Ereignis.
Wie prüfe ich in VBA, ob eine TextBox leer ist?
Prüfen Sie sie als Text: If Trim(TextBox1.Value) = "" Then. Eine leere Box ist eine Zeichenfolge der Länge
null, nicht 0 oder Null, und Trim fängt auch eine Box ab, die nur Leerzeichen enthält. Vergleichen Sie sie
nicht mit 0, das mischt eine Zeichenfolge mit einer Zahl und liefert irreführende Ergebnisse.
Wie validiere ich eine TextBox, während der Nutzer tippt?
Verwenden Sie das Change-Ereignis für billiges Feedback pro Tastendruck (eine Zeichenzählung, das Freischalten
einer Schaltfläche) und das Exit-Ereignis für die eigentliche Validierung. Setzen Sie in Exit das Argument
Cancel auf True, um den Cursor in der Box zu halten, bis die Eingabe gültig ist, sodass ein schlechter Wert
nie den Rest des Formulars erreicht.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 28.09.2026.
Verwandte Anleitungen: VBA Controls · VBA Frame · VBA UserForm · VBA InputBox · VBA ComboBox · VBA CheckBox · VBA On Error
