Stolperstein Formatierung in UserForm TextBox

In programmierten Formularen (UserForm) kommen häufig Eingabefelder in Form einer TextBox zur Anwendung. Meistens sollen die darüber eingegebenen Werte umgehend weiter verarbeitet werden. Und hier gilt es ggf. gleich von Beginn an Fehler zu vermeiden. Der Inhalt einer TextBox wird nämlich ohne weiteres Eingreifen grundsätzlich immer als String behandelt. Sollen in einer TextBox jedoch Zahlen erfasst werden, die anschließend zum Beispiel miteinander verglichen oder summiert werden sollen, müssen diese zuvor umformatiert werden.

Was passiert, wenn die Inhalte der TextBox-Felder nicht formatiert werden? Den Fehler wird man unter Umständen nicht sofort merken.

TextBox Eingabefelder in Userform

Unterschiede in der Sortierung von Texten und Zahlen:
Angenommen Sie haben eine UserForm in der die Eingabe einer Zahl “von” und einer Zahl “bis” erfolgen soll. Anschließend möchten Sie prüfen, ob die Eingabe korrekt erfolgt ist, also die Zahl “von” wirklich kleiner als die Zahl “bis” ist. Wenn Sie nun zum Beispiel die Zahlen 2 (“von”) und 3 (“bis”) eingeben wird die Prüfung erfolgreich sein. Wiederholen Sie den Versuch jedoch mit den Zahlen 9 (“von”) und 10 (“bis”) scheitert die Prüfung ohne Formatierung der TextBox-Inhalte. Der Grund: Die Zahlen wurden als Text interpretiert und somit auch als Text sortiert. An erster Stelle steht die 9 (“von”) gegenüber der 1 (“bis”). Die zweite Zahl wird bei der Sortierung ignoriert, da bei der Sortierung von Texten immer nur Stelle für Stelle miteinander verglichen wird.

Rechenoperationen:
Summieren Sie die beiden TextBox-Inhalte werden Sie im obigen Beispiel ohne Formatierung als Ergebnis nicht die korrekte Lösung 19, sondern 910 erhalten. Hier wird der Inhalt der zweiten TextBox nur an den Inhalt der ersten TextBox angehängt.

txtvon.Value + txtbis.Value

Korrekt rechnet das Makro erst, wenn Sie den Inhalt der TextBox mit einer Funktion formatiert summieren.

CLng(txtvon.Value) + CLng(txtbis.Value)

Die Funktion CLng() formatiert den Inhalt als Ganzzahl im Typ Long. Einen Währungsbetrag können Sie ggf. mit CCur() definieren. Sollen auch Zahlen mit Nachkommastellen eingegeben werden können, kann die Funktion CDbl() verwendet werden. Weitere Typkonvertierungsfunktionen in VBA können Sie im Microsoft Office Center nachlesen.

Vollständiges Excel Beispiel:
Die praktischen Auswirkungen können Sie mit dem Muster-Excelmappe selbst testen. Das Beispiel nutzt die Funktion Clng() und ist deshalb nur für Eingaben von Ganzzahlen (ohne Nachkommastellen) geeignet. Der Screenshot zeigt die Ergebnisprüfung der Eingaben der Zahlen “von” = 9 und “bis” = 10, und die Ausgabe der Rechenoperationen im VBA Direktbereich.

Unterschied zwischen formatierten und unformatierten TextBox Inhalten in Userform

Der vollständige VBA Quellcode hierfür lautet:

Private Sub btmDruck_Click()

'Schreibt Ergebnis der Rechenopteration in den VBA Direktbereich
Debug.Print txtvon.Value + txtbis.Value 'ohne Formatierung
Debug.Print CDbl(txtvon.Value) + CDbl(txtbis.Value) 'mit Formatierung

'Prüfung ohne Formatierung:
If txtbis.Value < txtvon.Value Then
    MsgBox ("Prüfung ohne Formatierung: Ist " & txtbis.Value & " wirklich kleiner als " & txtvon.Value & "?") 'Ergebnis nicht immer richtig!
End If

'Prüfung mit Formatierung:
If CDbl(txtbis.Value) < CDbl(txtvon.Value) Then
    MsgBox ("Prüfung mit Formatierung: " & txtbis.Value & " ist kleiner als " & txtvon.Value & "!")
Else
    MsgBox ("Prüfung mit Formatierung: Eingabe korrekt.")
End If

End Sub

Excel VBA TextBox in UserformMustermappe zur Formatierung von Eingabefeldern in einer UserForm.

 

Schreibe einen Kommentar

*