Veja esta rotina:
Private 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
Private Const LOCALE_SDECIMAL& = &HE
Private Const LOCALE_ILANGUAGE& = &H1
Private Const LOCALE_USER_DEFAULT& = &H400
Private Const LOCALE_STHOUSAND = &HF
Public g_strPontoDecimal As String * 1 'Armazena o ponto decimal que está sendo utilizado pelo usuário logado no Windows
Public g_strIdiomaRegSet As String * 5 'Armazena o idioma configurado no regional settings
Global g_strSeparadorMilhar As String * 1 'Armazena o separador de milhar que está sendo utilizado pelo usuário logado no Windows
ESPERO QUE AJUDE!!
Public Sub ObtemInformacoesRegionalSettings()
On Error GoTo Err_ObtemInformacoesRegionalSettings
Dim cLogHelper As McBTSFramework.cLogHelper
Set cLogHelper = New McBTSFramework.cLogHelper
cLogHelper.Initialize g_objLog, "ModGlobal", "ObtemInformacoesRegionalSettings"
Dim lngRetorno As Long 'Armazena o retorno da API
Dim strseparador As String
On Error GoTo Err_ObtemInformacoesRegionalSettings
strseparador = String(10, "a")
lngRetorno = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, strseparador, 10)
g_strPontoDecimal = Left$(strseparador, lngRetorno)
strseparador = String(10, "a")
lngRetorno = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, strseparador, 10)
g_strSeparadorMilhar = Left$(strseparador, lngRetorno)
lngRetorno = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, g_strIdiomaRegSet, 5) 'Idioma Regional Settings
'Pega apenas a parte numérica do idioma obtido do Regional Settings
g_strIdiomaRegSet = Replace(g_strIdiomaRegSet, Chr(0), "")
'Verifica qual é a locale do Regional Settings
Select Case Trim(g_strIdiomaRegSet)
Case "0416", "0816" 'Português (Brazil), 'Português (Portugal)
g_lngLingua = 0 '0=Português (Brazil) - Sempre
Case Else
g_lngLingua = 1 '1=English
End Select
cLogHelper.LogExit ""
Exit Sub
Err_ObtemInformacoesRegionalSettings:
cLogHelper.LogVBExecption
End Sub