Hallo!
Ich habe auf einer Form ein Textfeld (Text1), dessen Inhalt bei Änderung mit IsNumeric() überprüft wird: Es sind nur ganze Zahlen zulässig.
Nicht numerische Zeichen werden entfernt, der Cursor behält seine Position bei. Dezimalpunkte und Dezimalkomma sind nicht zulässig und werden enfternt. Soweit die Theorie.
In der Praxis funktioniert das auch ganz toll, bis auf 2 Umstände:
Wenn man eine Zahl eingibt, kann man zwischen:
- der vorletzten und letzten Ziffer
und - zwischen der drittletzten und vorletzten Ziffer
die Buchstaben „d“, „D“, „e“ und „E“ einfügen.
Konstrukte wie „1234e5“, „123e45“ sind also möglich.
„123e4e5“ wird witzigerweise wieder angemeckert (=entfernt), wie „1234ee5“ auch. Alle anderen Buchstaben werden ordnungsgemäß (sofort) entfernt!!!
Dieses verhalten wundert mich schon etwas. - Doch wo liegt der Fehler?
Im Einzelschritt werden die ‚wundersamen Zahlen‘ als numerisch anerkannt; es wird also nicht in den Ja-Pfad verzweigt.
Nun mein Code
Private Sub Text1\_Change()
Dim i As Integer 'Zähler
Dim intAktPos As Integer 'Aktuelle Cursorposition im Textfeld
Text1.Text = Replace(Text1.Text, ",", "")
Text1.Text = Replace(Text1.Text, ".", "")
If Not IsNumeric(Text1.Text) Then
intAktPos = Text1.SelStart
For i = 1 To Len(Text1.Text)
If Not IsNumeric(Mid(Text1.Text, i, 1)) Then
Text1.Text = Replace(Text1.Text, Mid(Text1.Text, i, 1), "")
End If
Next i
Text1.SelStart = intAktPos - 1
End If
End Sub
Danke schon jetzt,
Ute