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

VBA TextBox in Excel — warum .Value immer Text ist (und wie Sie es umwandeln)

|

VBA TextBox in Excel — warum .Value immer Text ist (und wie Sie es umwandeln)

Kurzfassung — Eine TextBox speichert nur eine Art von Inhalt: Text. TextBox1.Value liefert Ihnen immer eine String zurück, selbst wenn der Nutzer 42 oder 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 mit IsNumeric und wandeln Sie mit CDbl oder CLng um. .Text und .Value sind bei einer TextBox nahezu dasselbe; eine leere Box ist "", nicht 0.

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.Value immer ein String ist, egal wie er aussieht
  • Die zwei verschiedenen Arten, wie Rechnen mit .Value schiefgeht
  • Sicher umwandeln mit IsNumeric, dann CDbl oder CLng
  • Der kleine Unterschied zwischen .Text und .Value
  • Warum eine leere Box "" ist und nicht 0, und wie Sie das prüfen
  • Reagieren, während der Nutzer tippt, mit den Ereignissen Change und Exit

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