Decimaalscheiders in VB / Decimal seperators in VB

A.E.Veltstra
2004/02/13

Afbeelding: 'Nederlandse vlag'Nederlands - Image: 'English flag'English

Afbeelding: 'Nederlandse vlag'Nederlands

Kenwoorden
vb, vba, vbscript, visual basic, locale, decimaal, decimaalscheider, nummer, komma, punt, datum, jaar
Probleem
Visual Basic levert een getal dat een datum voorstelt, zoals 38000.25. IsNumeric(38000.25) levert True, maar Year(38000.25) levert type error (13): getal blijkt string te zijn.
Oorzaak
De Locale van de uitvoerende computer herkent de . niet als een decimaalscheider. De Locale is gebruikerafhankelijk.
Oplossing
Vervang de . door de PointToDecimal()-functie.

Image: 'English flag'English

Keywords
vb, vba, vbscript, visual basic, locale, decimal, separator, number, comma, point, dot, date, year
Problem
Visual Basic renders a number that represents a date, like 38000.25. IsNumeric(38000.25) returns True, but Year(38000.25) returns type error (13): number appears to be a string.
Cause
The executing computer's Locale doesn't recognise the . as a decimal separator. The Locale depends on user preferences.
Solution
Replace the . with the PointToDecimal() function.
Code
Function PointToDecimal(strNumber)

    Dim strDecimalSeparator

    strDecimalSeparator = Mid(CStr(1.1),2,1) 'retrieving the actual locale-bound separator

    If IsNumeric(strNumber) Then

        PointToDecimal = CDbl(Replace(strNumber, ".", strDecimalSeparator))

    Else

        PointToDecimal = CDbl(strNumber)

    End If

End Function