Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1096to1100
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ländereinstellungen

Ländereinstellungen
yosherl
Hallo zusammen,
ich bräuchte mal eure Hilfe!
Wir haben hier folgendes Problem:
Unsere VBA Makros werden Weltweit verwendet. Jeder arbeitet allerdings mit seinen eigenen Einstellungen, sprich Dezimalseperator, Listentrennzeichen usw..
In der Vergangenheit wurden wohl schon tests gemacht um diese Settings zu ändern, da sie anscheinend nicht richtig funktioniert haben.
Problem war wohl dass Excel das Ändern der Ländereinstellung nur bei einem Neustart von Excel übernimmt. Beispiel:
Jemand hat 3 Exceldateien offen. Und möchte aus dem 3. das VBA Makro starten. Dieses erkennt dass die Settings falsch sind, und ändert diese. Nun müssten allerdings alle 3 Dateien geschlossen werden, damit Excel die Einstellungen übernimmt?! Dies wäre nicht wirklich Anwenderfreundlich.
Hier mal ein Code den ich gefunden habe, um die Einstellungen zu ändern:
' benötigte API-Deklarationen
Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
Private Declare Function SetLocaleInfo Lib "kernel32" _
Alias "SetLocaleInfoA" ( _
ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String) As Long
Private Declare Function PostMessage Lib "user32" _
Alias "PostMessageA" ( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Const LOCALE_SMONDECIMALSEP = &H16
Private Const LOCALE_SDECIMAL = &HE
Private Const LOCALE_SMONTHOUSANDSEP = &H17
Private Const LOCALE_STHOUSAND = &HF
Private Const WM_SETTINGCHANGE = &H1A
Private Const HWND_BROADCAST = &HFFFF&
Sub test()
'erg = Shell("Control.exe intl.cpl")
' Punkt als Tausenderzeichen, und Komma als Dezimalzeichen
' für den aktuellen Benutzer festlegen
If SetNewNumberFormat(".", ",", False) Then
MsgBox "Zahlen- und Währungsformat wurden korrekt umgestellt"
Else
MsgBox "Systemeinstellungen konnten nicht geändert werden." & vbCrLf & _
"Ggf. hat der angemeldete Benutzer nicht genügend Rechte!"
End If
End Sub
Public Function SetNewNumberFormat(ByVal sDecChar As String, _
Optional ByVal sGroupChar As String = "", _
Optional ByVal bAllUser As Boolean = True) As Boolean
Dim nLCID As Long
Dim bResult As Boolean
If bAllUser Then
' systemweite Änderung für alle Benutzer
nLCID = GetSystemDefaultLCID()
Else
' Änderung nur für den aktuell angemeldeten Benutzer
nLCID = GetUserDefaultLCID()
End If
' Neues Währungsformat setzen
bResult = (SetLocaleInfo(nLCID, LOCALE_SMONDECIMALSEP, sDecChar)  0)
bResult = (SetLocaleInfo(nLCID, LOCALE_SMONTHOUSANDSEP, sGroupChar)  0)
' Neues Zahlenformat setzen
bResult = (SetLocaleInfo(nLCID, LOCALE_SDECIMAL, sDecChar)  0)
bResult = (SetLocaleInfo(nLCID, LOCALE_STHOUSAND, sGroupChar)  0)
If bResult Then
' System über die Änderung benachrichtigen
PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
End If
SetNewNumberFormat = bResult
End Function

Hat vielleicht jemand damit schon Erfahrung gemacht? Kann mir jemand sagen ob ich hier eine "Wasserdichte" Lösung finden kann, denn die Auswirkungen wären relativ hoch, da ich hier ca. 1000 Programme anpassen würde. Gegen ende des Jahres verwenden wir Excel 2007.
Vielen Dank schonmal für eure Hilfe!
yosh

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Ländereinstellungen
21.08.2009 10:12:53
Hajo_Zi
Hallo,
das ist mir schleierhaft warum man das umstellen muss. Excel past das automatisch an. Du darfst nur nicht die Lokalen einstellungen benutzen z.B. mit Formulalocal.

AW: Ländereinstellungen
21.08.2009 10:26:23
yosherl
Hallo Hajo,
genau das ist unser Problem, das Excel das Automatisch macht.
Angenommen du speicherst eine Datei, in der du eine Zahl wie folgt hast:
1,000,000.000 (1 Million)
Das komma ist dein Tausendertrennzeichen.
Der Punkt dein Dezimaltrennzeichen.
Jetzt wird diese Datei übers große blau geschickt, und der User dort macht die Datei mit folgdenen "Punkt/Komma" Einstellungen auf:
Komma ist Dezimaltrennzeichen
Punkt ist Tausendertrennzeichen
Jetzt sieht die Zahl wie folgt aus:
1,000000000 (1 eins)
gruß,
yosh
Anzeige
AW: Ländereinstellungen
21.08.2009 10:53:59
Tino
Hallo,
dies kann ich nicht nachvollziehen,
Excel macht bei mir nicht aus 1,000,000.000 (Englisch USA) eine 1 sondern
1.000.000,000 (Deutsch Deutsch).
Das einzigste ist im VBA, wenn du mit String Zahlen arbeitest, da muss im String der
richtige Dezimal- Separator verwendet werden.
(siehe auch hier: https://www.herber.de/forum/messages/1097080.html )
Beispiel:
Dim Wert As Single
Wert = "100,5" * 1 'hier muss der richtige verwendet werden
Bei normalen Zahlen Single, Double, Currency wird im VBA der Punkt verwendet.
Beispiel:
Dim Wert As Single
Wert = 100.5 'hier muss ein Punkt verwendet werden
Gruß Tino
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige