Rubrik: Variablen/Strings · String-Operationen | VB-Versionen: VB6, VBA | 23.02.10 |
Triviallösung des KommaProblems: Komma in TextString, der zur Zahleneingabe dient Sicherstellen, dass Zahleneingaben korrekt via VAL-Funktion ausgewertet werden. | ||
Autor: Horst Laubmann | Bewertung: | Views: 14.841 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Problem: Je nach Ländereinstellung wird eine Zahl ab dem Komma nicht mehr benutzt, d.h. Nachkommastellen werden nicht berücksichtigt = falsche ZahlenEingabe.
Der String, der durch VAL zum Zahlenwert wird, darf als Dezimalseparator nur einen Punkt enthalten.
Lösung: Komma im String zum Punkt wandeln: KillKomma
Für das nachfolgende Beispiel werden 2 Textfelder auf einer Form benötigt (txt_Wert(0) und txt_Wert(1)).
Option Explicit ' ------------------------------------------------------------------------------------------ ' KommaProblem: Komma in TextString, der zur Zahleneingabe dient. ' Problem: mit deutscher Ländereinstellung wird eine Zahl ab dem Komma nicht mehr benutzt. ' d.h.: Nachkommastellen werden nicht berücksichtigt = falsche ZahlenEingabe. ' Der String, der zum Zahlenwert wird, darf als Dezimalseparator nur einen Punkt enthalten. ' Lösung: Komma im String zum Punkt wandeln. ' Horst Laubmann ' ------------------------------------------------------------------------------------------ Dim dWert As Double Private Sub Form_Load() ' Initialisieren dWert = 0 End Sub Private Sub txt_Wert_KeyPress(Index As Integer, KeyAscii As Integer) ' Wert wurde geändert If KeyAscii = 13 Then Select Case Index Case 0: ' die Angaben in m werden geändert Call KillKomma(txt_Wert(0)) dWert = Val(txt_Wert(0).Text) ' Eingabe in meter txt_Wert(1).Text = Format(dWert / 0.3048, "#.000") ' feet werden angezeigt Case 1: ' die Angaben in feet wurden geändert Call KillKomma(txt_Wert(1)) dWert = Val(txt_Wert(1).Text) * 0.3048 ' Umrechnung in meter txt_Wert(0).Text = Format(dWert, "#.000") ' meter werden angezeigt End Select End If End Sub Function KillKomma(ÜbergabeString As Object) ' Tauscht im übergebenen String ein Komma gegen einen Punkt aus ' zur unproblematischen Zahleneingabe mittels Textfeld Dim HilfsString As String Dim Z As Long HilfsString = ÜbergabeString.Text ' ein Komma gegen Punkt tauschen Z = InStr(HilfsString, ",") If Z <> 0 Then Mid$(HilfsString, Z, 1) = "." End If ÜbergabeString.Text = HilfsString End Function