der Witz ist nämlich:
Auf einem "deutsch" eingestellten Windoofs passiert folgendes:
CDbl("1,234") = 1.234
CDbl("1.234") = 1234.0
CDbl(",0345") -> *kaputt* !!!
CDbl(".0345") -> auch *kaputt* !!!
Hingegen auf einem z.B. "US" eingestellen WinXX verhält es sich mit den Punkten genau anders herum - das mit dem *kaputt* bleibt gleich!
:->
LÖSUNG
======
diese beiden Functions könne BEIDES:
' 8<----------------------------------------------------------------
' Variablen-Deklaration im Modul:
Public decChar as String
Public notDecChar as String
' 8<----------------------------------------------------------------
' findet das Dezimaltrennzeichen, das gerade gültig ist
' - habe 1h nach einer VB-function gesucht und nichts gefunden.
' ... aber VB ist wirklich einfach! :-(
Private Sub checkDecChar()
If 1.55 = CDbl("1.55") Then
decChar = "."
notDecChar = ","
ElseIf 1.55 = CDbl("1,55") Then
decChar = ","
notDecChar = "."
Else
MsgBox ("kann das Dezimaltrennzeichen (',' oder '.') nicht ermitteln!")
End If
'MsgBox ("hurra! Dezimaltrennzeichen gefunden: " & decChar)
End Sub
' 8<----------------------------------------------------------------
' gibt den double-Wert eines Strings zurück
Public Function str2Dbl(str As String) As Double
Dim newStr As String
newStr = Replace(str, notDecChar, decChar, , , vbTextCompare)
' Falls kein Zeichen vor dem Dezimaltrenner: eine Null vorne anhängen.
' Sonst funktioniert CDlb() nicht.
If Left(newStr, 1) = decChar Then newStr = "0" & newStr
' wenn String leer, dann wird 0.0 zurückgegeben
If newStr = "" Then newStr = 0
'returnwert
str2Dbl = CDbl(newStr)
End Function
' 8<------------------------------------------------------------------
Localistion ist wirklich schlimm - wenn MS keine Funktionen zur Verfügung stellt, um diese zu umgehen und Zahlen aus Strings zu gewinnen wie es sonst in jeder normalen Programmiersprache üblich ist.
Irgendwelche Spezialformate kann ich dann trotztdem noch benutzten - aber auch nur dann, wenn ich es wirklich will.
mfg
Jan Mentzel
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP