Lokale Formate, NumberFormat, NumberFormatLocal
10.09.2009 14:06:21
fcs
Hallo Klaus,
man kann die Sprache in den Systemeinstellungen ermitteln und abhängig davon Festlegungen für lokale Formate treffen. Die Werte und Variablennamen für die Sprachen findest du im VBA-Editor-Objektkatalog wenn du nach "msoLanguageID" suchst.
Das Prüfen und ggf. zeitweise Ändern der Einstellung (Option) "Trennzeichen vom Betriebssystem übernehmen" ist dabei unbedingt erforderlich, da sonst Zahlen Kuddel-Muddel entseht.
Gruß
Franz
Beispiel:
'Prozedur in einem allgemeinen Modul der Datei, evtl. mit Workbook_Open starten
Option Explicit
'Variablen für VBA-Projektweite NumberFormatLocal-Formate
Public strLocalFormat_Sci As String, strLocalFormat_Dec1000 As String
Public bolSeparator As Boolean 'Status Trennzeichen vom Betriebssystem übernehmen
Sub subLocalFormat()
'Lokale Zahleformate abhängig von den Systemeinstellungen festlegen
'Status für "Trennzeichen vom Betriebssystem übernehmen" merken
bolSeparator = Application.UseSystemSeparators
With Excel.Application.LanguageSettings
'Lokale Formate gemäß Spracheinstellung festlegen
Select Case .LanguageID(msoLanguageIDInstall)
Case msoLanguageIDEnglishUS
strLocalFormat_Sci = "##0.00E+00": strLocalFormat_Dec1000 = "#,##0.00"
Case msoLanguageIDEnglishUK
strLocalFormat_Sci = "##0.00E+00": strLocalFormat_Dec1000 = "#,##0.00"
Case msoLanguageIDGerman
strLocalFormat_Sci = "##0,00E+00": strLocalFormat_Dec1000 = "#.##0,00"
Case msoLanguageIDSwissGerman
strLocalFormat_Sci = "##0,00E+00": strLocalFormat_Dec1000 = "#'##0.00"
Case Else
strLocalFormat_Sci = "": strLocalFormat_Dec1000 = ""
End Select
End With
End Sub
'Anwendung in beliebigen Prozeduren der Datei
Sub aaTest()
Dim Number As Double
Call subLocalFormat 'Nicht erforderlich, wenn per Workbook_Open gestartet.
'Status für "Trennzeichen vom Betriebssystem übernehmen" prüfen und ggf. _
auf True setzen
If bolSeparator = False Then Application.UseSystemSeparators = True
'Test-Eingaben mit Anzeige der Formate
Range(Cells(1, 1), Cells(1, 2)).NumberFormat = "General"
Range(Cells(1, 1), Cells(1, 2)).ClearContents
Number = 123456.123
With Cells(1, 1)
'Zellformatierungen mit NumberFormatLocal
.Value = Number
.NumberFormatLocal = strLocalFormat_Sci
End With
With Cells(1, 2)
.Value = Number
.NumberFormatLocal = strLocalFormat_Dec1000
End With
'Status für "Trennzeichen vom Betriebssystem übernehmen" ggf. wieder zurücksetzen
If bolSeparator = False Then Application.UseSystemSeparators = False
End Sub