Anzeige
Archiv - Navigation
568to572
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
568to572
568to572
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Application.International VS. Regional Settings

Application.International VS. Regional Settings
18.02.2005 14:07:37
Manfred
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.
AW: Application.International VS. Regional Settings
K.Rola
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
AW: Application.International VS. Regional Settings
18.02.2005 14:27:59
Manfred
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.
Anzeige
AW: Application.International VS. Regional Settings
K.Rola
..oops, da hab ich wohl was verwechselt, ist aber auch keine Aktion.
Willst du nur den Dezimalseparator oder auch das Tausendertrennzeichen?
Gruß K.Rola
AW: Application.International VS. Regional Settings
18.02.2005 14:46:32
Manfred
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.
AW: Application.International VS. Regional Settings
K.Rola
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
Anzeige
AW: Application.International VS. Regional Settings
Reinhold
Hallo Manfred,
mittels z.B.
MsgBox Mid(CCur(1.1), 2, 1) = "."
erkennst du das Dezimaltrennzeichen!
Grüße Reinhold
AW: Application.International VS. Regional Settings
K.Rola
Hallo,
das war für Währung, er brauchte aber Zahlen, You know?
Gruß K.Rola
AW: Application.International VS. Regional Settings
Reinhold
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
AW: Application.International VS. Regional Settings
18.02.2005 15:17:28
Manfred
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.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige