Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Application.International VS. Regional Settings

Forumthread: 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.
Anzeige
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
Anzeige
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.
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
Anzeige
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
Anzeige
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

Infobox / Tutorial

Application.International und Regionaleinstellungen in Excel VBA


Schritt-für-Schritt-Anleitung

Um das Dezimal-Trennzeichen und das Tausender-Trennzeichen aus den regionalen Einstellungen des Systems auszulesen, kannst du folgenden VBA-Code verwenden:

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 GetUserDefaultLCID Lib "kernel32" () As Long
Const LOCALE_SDECIMAL = &HHE
Const LOCALE_STHOUSAND = &HF

Sub Tausender()
    Dim lngID As Long, msg As String
    lngID = GetUserDefaultLCID()
    msg = String(255, 0)
    Call GetLocaleInfo(lngID, LOCALE_STHOUSAND, msg, 255)
    msg = Left(msg, InStr(msg, Chr(0)) - 1)
    MsgBox "Tausendertrennzeichen: " & msg
End Sub

Sub Dezimal()
    Dim lngID As Long, msg As String
    lngID = GetUserDefaultLCID()
    msg = String(255, 0)
    Call GetLocaleInfo(lngID, LOCALE_SDECIMAL, msg, 255)
    msg = Left(msg, InStr(msg, Chr(0)) - 1)
    MsgBox "Dezimaltrennzeichen: " & msg
End Sub

Führe Tausender und Dezimal aus, um die Trennzeichen anzuzeigen.


Häufige Fehler und Lösungen

  • Fehler: VBA erkennt das Dezimaltrennzeichen nicht korrekt.

    • Lösung: Stelle sicher, dass die regionalen Einstellungen des Systems korrekt konfiguriert sind. Nutze die oben genannten Funktionen, um die Trennzeichen auszulesen und sicherzustellen, dass sie der Systemsteuerung entsprechen.
  • Fehler: Komma wird als Text behandelt.

    • Lösung: Achte darauf, dass du die richtigen Trennzeichen für Berechnungen verwendest. Wenn das System ein Punkt als Trennzeichen hat, kann VBA mit dem Wert 4.5 einen Fehler werfen. Überprüfe die regional settings excel und passe deine Eingaben an.

Alternative Methoden

Eine alternative Methode, um die Trennzeichen zu ermitteln, wäre die Verwendung der Application.International-Funktion:

MsgBox "Dezimal-Trennzeichen: " & Application.International(xlDecimalSeparator)
MsgBox "Tausender-Trennzeichen: " & Application.International(xlThousandsSeparator)

Diese Methode gibt dir die Einstellungen zurück, die in Excel definiert sind, jedoch nicht unbedingt die des Systems.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du die Funktionen in deinem VBA-Projekt nutzen kannst:

  1. Dezimaltrennzeichen prüfen:

    Sub CheckDecimalSeparator()
       MsgBox "Das Dezimaltrennzeichen ist: " & Application.International(xlDecimalSeparator)
    End Sub
  2. Tausendertrennzeichen verwenden:

    Sub CheckThousandSeparator()
       MsgBox "Das Tausendertrennzeichen ist: " & Application.International(xlThousandsSeparator)
    End Sub

Diese Beispiele zeigen, wie einfach es ist, die application.international-Funktion zu nutzen, um die excel regional settings auszulesen.


Tipps für Profis

  • Verwende die locale_sdecimal und settings auf deutsch, um sicherzustellen, dass deine VBA-Projekte für deutschsprachige Benutzer optimiert sind.
  • Teste deinen Code in verschiedenen regionalen Einstellungen, um sicherzustellen, dass er universell funktioniert.
  • Berücksichtige, dass die vba application.international-Funktion nur die Einstellungen innerhalb von Excel reflektiert, nicht die des gesamten Systems.

FAQ: Häufige Fragen

1. Wie kann ich das Dezimaltrennzeichen für alle Benutzer einheitlich einstellen?
Du kannst dies über die Systemsteuerung unter den Regionaleinstellungen vornehmen. Achte darauf, dass alle Benutzer dieselben Einstellungen nutzen.

2. Gibt es eine Möglichkeit, die regionalen Einstellungen in Excel zu ändern?
Ja, du kannst die regionalen Einstellungen in Excel ändern, indem du zu "Datei" > "Optionen" > "Sprache" gehst und dort die gewünschten Einstellungen vornimmst.

3. Warum funktioniert Application.International nicht immer wie erwartet?
Application.International bezieht sich auf die Excel-Einstellungen und nicht auf die Systemeinstellungen. Um sicherzustellen, dass dein Code überall korrekt läuft, solltest du beide Quellen abfragen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige