Translate

Donnerstag, 15. Dezember 2011

Dezimalzahl an SQL-String / VBA korrekt übergeben

Die Konvertierungsfunktion von Text in einen Wert ist bekannterweise die Funktion VAL(String)
Nur die Funktion VALUE benötigt in der VBA-Umgebung immer den Punkt als Dezimaltrennzeichen.
In einigen Länder wie Deutschland wird bekannterweise das Komma als Dezimaltrennzeichen verwendet.
Das Komma wird von VBA jedoch nicht als Dezimaltrennzeichen erkannt, sondern als ein Buchstabe. Somit ergibt VAL("100,6") den Wert 100 und nicht 100,6
Oder VAL("1.500,6") ergibt den Wert 1,5

Es liegt also nah über die Funktion Replace() das Komma durch ein Punkt ersetzen zu lassen.
Das erzeugt auch das Richtig Ergebnis, allerdings nur solange der VBA-Code auf einer Maschine mit dieser Ländereinstellung läuft.
Mit der englischen Ländereinstellung und der englischen Eingabeform wird aus
Replace("1,500.6" , "," , ".") der Text "1.500.6" und VAL("1.500.6") ergibt wieder die 1,5

Also wieder falsch :-(

Die folgende alternative funktioniert immer: VAL(STR("100,6")

Und um sicher zu gehen, dass "100,6" auch wirklich einen Wert darstellt, sollten Sie dies mit der Funktion ISNUMERIC prüfen.

Einen Wert Abfrage wobei die Dezimalstellen berücksichtig werden, könnte also so aussehen:
    Dim Rückgabewert As String, Wert As Double
    Rückgabewert = InputBox("Ihr Wert:", , 100)
    If IsNumeric(Rückgabewert ) then
       Wert = Val(Str(Rückgabewert))
    End If 
Denken Sie daran, alle Eingabefelder in Formularen sind Textfelder und keine Zahlenfelder!

Keine Kommentare:

Kommentar veröffentlichen