Application.International VS. Regional Settings

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Application.International VS. Regional Settings
von: Manfred
Geschrieben am: 18.02.2005 14:07:37
Hallo Leute...
Wieder einmal das leidige Thema mit den Punkt/Komma-Einstellungen, diesmal aber etwas anders.
Frage:
******
Wie kann ich auslesen, welches Dezimal-Trennzeichen DAS SYSTEM verwendet? (was ja in den Regional-Einstellungen der Systemsteuerung steht. Diese verwendet ja VBA, unabhängig von den Einstellungen in Excel!!!)
Wie man die ganzen Einstellungen in Excel abrufen kann, ist mir schon klar:
Application.International(xlDecimalSeparator/xlCountrySetting/xl...)
Leider verwendet VBA für Berechnungen nicht die Trennzeichen, die ich mit xlDecimalSeparator zurück bekomme sondern die des Systems. Der xlDecimalSeparator ist nur für die Darstellung in Excel (Sheets) relevant.
Keine Lösung:
*************
Ich habe schon daran gedacht, mittels der Ländereinstellung einen Rückschluss auf das Trennzeichen zu machen, aber das ist riskant und falsch. So haben bei uns etwa viele im System (!) einen Punkt als Trennzeichen eingestellt, obwohl wir im deutsch-sprachigen Raum sind und hier im Grunde das Komma gilt. VBA sieht etwa die Zahl 4,5 plötzlich als Text und beim berechnen wird 45 verwendet (also Trennzeichn ignoriert).
Wie kann ich auslesen, welches Dezimal-Trennzeichen DAS SYSTEM verwendet?
Vielen Dank, Manfred.

Bild

Betrifft: AW: Application.International VS. Regional Settings
von: K.Rola
Geschrieben am: 18.02.2005 14:24:08
Hallo,
Info zum Währungsformat via API:
Option Explicit
Declare Function GetCurrencyFormat Lib "kernel32" Alias "GetCurrencyFormatA" (ByVal Locale As Long, ByVal dwFlags As Long, ByVal lpValue As String, lpFormat As Any, ByVal lpCurrencyStr As String, ByVal cchCurrency As Long) As Long
Sub Waehrung()
Dim Buffer As String
Buffer = String(255, 0)
GetCurrencyFormat ByVal 0&, 0, "1234.32", ByVal 0&, Buffer, Len(Buffer)
Buffer = Left$(Buffer, InStr(1, Buffer, Chr$(0)) - 1)
MsgBox Buffer
End Sub

Gruß K.Rola
Bild

Betrifft: AW: Application.International VS. Regional Settings
von: Manfred
Geschrieben am: 18.02.2005 14:27:59
Danke für die Antwort, aber in wiefern soll mir das helfen? Ich brauche ja das Dezimaltrennzeichen für Zahlen. Könntest du das noch erklären?
Danke.
Bild

Betrifft: AW: Application.International VS. Regional Settings
von: K.Rola
Geschrieben am: 18.02.2005 14:43:34
..oops, da hab ich wohl was verwechselt, ist aber auch keine Aktion.
Willst du nur den Dezimalseparator oder auch das Tausendertrennzeichen?
Gruß K.Rola
Bild

Betrifft: AW: Application.International VS. Regional Settings
von: Manfred
Geschrieben am: 18.02.2005 14:46:32
Im Grunde komme ich mit dem Dezimal-Trennzeichen aus, würde mich aber freuen, beide Lösungen zu sehen, da es ja passieren kann, dass ich das Tausender-Trennzeichen auch Mal brauche - wer weiss.
Danke, Manfred.
Bild

Betrifft: AW: Application.International VS. Regional Settings
von: K.Rola
Geschrieben am: 18.02.2005 14:53:59
So soll es sein:
Option Explicit
Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" ( _
ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, _
ByVal cchData As Long) As Long
Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" ( _
ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
Const LOCALE_SDECIMAL = &HE
Const LOCALE_STHOUSAND = &HF
Sub Tausender()
Dim lngID As Long, lngCVal As Long, msg As String
lngCVal = GetUserDefaultLCID()
msg = String(255, 0)
Call GetLocaleInfo(lngID, LOCALE_STHOUSAND, msg, 255)
msg = Left(msg, InStr(msg, Chr(0)) - 1)
MsgBox msg
End Sub
Sub Dezimal()
Dim lngID As Long, lngCVal As Long, msg As String
lngCVal = GetUserDefaultLCID()
msg = String(255, 0)
Call GetLocaleInfo(lngID, LOCALE_SDECIMAL, msg, 255)
msg = Left(msg, InStr(msg, Chr(0)) - 1)
MsgBox msg
End Sub

Gruß K.Rola
Bild

Betrifft: AW: Application.International VS. Regional Settings
von: Reinhold
Geschrieben am: 18.02.2005 14:52:05
Hallo Manfred,
mittels z.B.
MsgBox Mid(CCur(1.1), 2, 1) = "."
erkennst du das Dezimaltrennzeichen!
Grüße Reinhold
Bild

Betrifft: AW: Application.International VS. Regional Settings
von: K.Rola
Geschrieben am: 18.02.2005 14:55:22
Hallo,
das war für Währung, er brauchte aber Zahlen, You know?
Gruß K.Rola
Bild

Betrifft: AW: Application.International VS. Regional Settings
von: Reinhold
Geschrieben am: 18.02.2005 15:11:43
Hallo K.Rola,
das schöne an der CCUR- Funktion ist, dass man das Kommazeichen, so wie es in der Systemsteuerung eingestellt ist, abfragen kann!
Grüße Reinhold
Bild

Betrifft: AW: Application.International VS. Regional Settings
von: Manfred
Geschrieben am: 18.02.2005 15:17:28
VIELEN DANK!
Hab das Skript von K.Rola getestet und es läuft hervorragend!!!
Speziellen Dank deshalb an Dich K.Rola und danke auch allen, die sich immer so toll an den brennenden Fragen der User beteiligen.
ES LEBE DIESES FORUM!
Baba, Manfred.
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Wiederholungszeilen unten / Seitensummen"