Regionale Einstellung

Regionale Einstellung

Zunächst: Vielen Dank gilt meinem Arbeitskollegen und Freund Bernhard Liebenhoff, der nach mühseliger Arbeit mit der Problemsuche und Problemlösung, mir diese Information dieser Funktion zur Verfügung gestellt hat.

Hin und wieder wird man mit dem Punkt, Komma Problem und der Ländereinstellung in Microsoft Windows und Microsoft Office konfrontiert.

Im folgenden Beispiel trat der Fehler mit einem englischen Windows XP und Windows 7 mit  deutschem Sprachpaket, Regions- und Sprachoption in der unter Regionale Einstellung > Deutsch > Anpassen > als Dezimaltrennzeichen Punkt eingestellt wurde.

Normalerweise ist in der deutschen Einstellung an dieser Stelle ein Komma als Dezimaltrennzeichen definiet.

Wird aber auf diesem „deutschem“ System mit englischer Software gearbeitet und dann noch mit dem Nummerblock,  stellt man das Komma auf der Tastatur als Punkt ein.

Denn im englischen werden bekannterweise Dezimalzahlen mit Punkt statt mit Komma geschrieben.

Wenn man jetzt eine VBA Applikation erstellt die mit Dezimalzahlen arbeitet und diese Applikation auch auf anderen Rechnern nutzen möchte, bei der das Komma nicht als Punkt für die Tastatur eingestellt wurde, trifft man auf ein folgend schweres Problem.

Regionale Einstellung anpassen > Dezimaltrennzeichen

Regionale Einstellung anpassen > Dezimaltrennzeichen

Wenn in einer Userform eine Deziamlzahl in deutscher Schreibweise eingegeben wird, wird mit dieser Zahl nicht korrekt gerechnet, da VBA im Hintergrund diese Zahl nicht als Dezimalzahl, sondern als „Tausender Zahl“ erkennt. Denn im englischen gilt ein Komma als Tausender-Trennzeichen.

Nun könnte ganz einfach auf die Replace Funktion unter VBA zurückgegriffen werden, die das Komma durch einen Punkt ersetzt. Das funktioniert aber nur dann, wenn man eine Komma als Dezimaltrennzeichen unter den regionalen Einstellungen definiert hat. Wenn man das Trennzeichen in der Region Deutsch als Punkt definiert hat, kommt die Replace Funktion damit nicht zurecht.

Um nun schlußendlich herauszufinden, welches Trennzeichen auf dem jeweiligen PC eingestellt ist, kann man sich mit der Funktion

[vb]

Application.International(xlDecimalSeparator)

[/vb]

Abhilfe schaffen.

Diese Funktion ließt die atkuelle Einstellung aus,  mit der man dann weiter arbeiten kann:

[vb]

If Application.International(xlDecimalSeparator) = "." Then
Userform.Controls("TextBox" & 1).Value = Replace(Userform.Controls("TextBox" & 1).Value, ",", ".")
End If
[/vb]