Giúp code làm sao biết được định dạng trong Region Format

Liên hệ QC

hondacrv2019

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
19/5/19
Bài viết
116
Được thích
9
Chào cả nhà GPE thân tình !
Cho tôi hỏi dùng code nào để xác định 2 mục Decimal symbol Digit grouping Symbol là dấu chấm (.) hay dấu phẩy (,)
Xin chân thành cảm ơn !

223802
 
Cho tôi hỏi dùng code nào để xác định 2 mục Decimal symbol Digit grouping Symbol là dấu chấm (.) hay dấu phẩy (,)

:) Tôi thì xử lý trường hợp này theo kiểu là: Thiết lập kiểu định dạng mình muốn (phân cách hàng ngàn, phân cách số thập phân, định dạng tiền tệ, ngày) theo như ứng dụng của mình yêu cầu. Khi khởi động ứng dụng sẽ chạy code đối chiếu với định dạng của hệ thống. Nếu giống thì tiếp tục mở ứng dụng, nếu không phù hợp thì thiết lập lại hệ thống rồi khởi động lại ứng dụng.

Dưới đây là code tôi dùng để đổi định dạng của hệ thống Windows (Code này trên mạng cũng đầy ra :) )

Mã:
Option Explicit

Public Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
Public 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
Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Const LOCALE_ICENTURY = &H24
Public Const LOCALE_ICOUNTRY = &H5
Public Const LOCALE_ICURRDIGITS = &H19
Public Const LOCALE_ICURRENCY = &H1B
Public Const LOCALE_IDATE = &H21
Public Const LOCALE_IDAYLZERO = &H26
Public Const LOCALE_IDEFAULTCODEPAGE = &HB
Public Const LOCALE_IDEFAULTCOUNTRY = &HA
Public Const LOCALE_IDEFAULTLANGUAGE = &H9
Public Const LOCALE_IDIGITS = &H11
Public Const LOCALE_IINTLCURRDIGITS = &H1A
Public Const LOCALE_ILANGUAGE = &H1
Public Const LOCALE_ILDATE = &H22
Public Const LOCALE_ILZERO = &H12
Public Const LOCALE_IMEASURE = &HD
Public Const LOCALE_IMONLZERO = &H27
Public Const LOCALE_INEGCURR = &H1C
Public Const LOCALE_INEGSEPBYSPACE = &H57
Public Const LOCALE_INEGSIGNPOSN = &H53
Public Const LOCALE_INEGSYMPRECEDES = &H56
Public Const LOCALE_IPOSSEPBYSPACE = &H55
Public Const LOCALE_IPOSSIGNPOSN = &H52
Public Const LOCALE_IPOSSYMPRECEDES = &H54
Public Const LOCALE_ITIME = &H23
Public Const LOCALE_ITLZERO = &H25
Public Const LOCALE_NOUSEROVERRIDE = &H80000000
Public Const LOCALE_S1159 = &H28
Public Const LOCALE_S2359 = &H29
Public Const LOCALE_SABBREVCTRYNAME = &H7
Public Const LOCALE_SABBREVDAYNAME1 = &H31
Public Const LOCALE_SABBREVDAYNAME2 = &H32
Public Const LOCALE_SABBREVDAYNAME3 = &H33
Public Const LOCALE_SABBREVDAYNAME4 = &H34
Public Const LOCALE_SABBREVDAYNAME5 = &H35
Public Const LOCALE_SABBREVDAYNAME6 = &H36
Public Const LOCALE_SABBREVDAYNAME7 = &H37
Public Const LOCALE_SABBREVLANGNAME = &H3
Public Const LOCALE_SABBREVMONTHNAME1 = &H44
Public Const LOCALE_SCOUNTRY = &H6
Public Const LOCALE_SCURRENCY = &H14
Public Const LOCALE_SDATE = &H1D
Public Const LOCALE_SDECIMAL = &HE
Public Const LOCALE_SENGCOUNTRY = &H1002
Public Const LOCALE_SENGLANGUAGE = &H1001
Public Const LOCALE_SGROUPING = &H10
Public Const LOCALE_SINTLSYMBOL = &H15
Public Const LOCALE_SLANGUAGE = &H2
Public Const LOCALE_SLIST = &HC
Public Const LOCALE_SLONGDATE = &H20
Public Const LOCALE_SMONDECIMALSEP = &H16
Public Const LOCALE_SMONTHOUSANDSEP = &H17
Public Const LOCALE_SNATIVECTRYNAME = &H8
Public Const LOCALE_SNATIVEDIGITS = &H13
Public Const LOCALE_SNATIVELANGNAME = &H4
Public Const LOCALE_SNEGATIVESIGN = &H51
Public Const LOCALE_SPOSITIVESIGN = &H50
Public Const LOCALE_SSHORTDATE = &H1F
Public Const LOCALE_STHOUSAND = &HF
Public Const LOCALE_STIME = &H1E
Public Const LOCALE_STIMEFORMAT = &H1003

Public Const WM_SETTINGCHANGE = &H1A
Public Const HWND_BROADCAST = &HFFFF&

'Nhap kieu dinh dang Ngay, So
Public Const FormatCurrSymb = "$"           'Ky tu dau cua dang Currency
Public Const FormatDec = "."                  'Phan cach so thap phan
Public Const FormatThou = ","                 'Phan cach hang ngan
Public Const FormatSDate = "dd/MM/yyyy"       'Kieu Short Date
Public Const FormatLDate = "dd MMMM yyyy"     'Kieu Long Date

Public Sub ChangeSysDatNumCur()
    Dim lLocal As Long
    Dim LenDate As Long, LenCur As Long, LenNum As Long
    Dim dwLCID As Long
    Dim BufDate As String * 1024, BufCur As String * 1024, BufNum As String * 1024

    On Error GoTo ChangeSysDatNumCur_Error

    lLocal = GetSystemDefaultLCID()
    LenDate = GetLocaleInfo(lLocal, LOCALE_SSHORTDATE, BufDate, Len(BufDate))
    LenCur = GetLocaleInfo(lLocal, LOCALE_SMONTHOUSANDSEP, BufCur, Len(BufCur))
    LenNum = GetLocaleInfo(lLocal, LOCALE_STHOUSAND, BufNum, Len(BufNum))
    If Not Left$(BufDate, LenDate - 1) = FormatSDate Or Not Left$(BufCur, LenCur - 1) = FormatThou Or Not Left$(BufNum, LenNum - 1) = FormatThou Then   'Kiem tra ngay he thong co cung dinh dang mong muon ko?
        dwLCID = GetSystemDefaultLCID()
        If SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE, FormatSDate) = False Then  'Thiet lap thu xem co loi ko?
            MsgBox "Khong doi duoc dinh dang ngay, so cua he thong.", 64, "Lien he nhan vien Quan tri he thong"
            Exit Sub
        Else
            Change_LocaleInfo
            MsgBox "Ung dung se tu khoi dong lai de cac thiet lap co hieu luc.", vbInformation, "Thông báo"
            'RestartAccessApp.Restart True     'Khoi dong va Compact database Access
        End If
    Else
        MsgBox "Dinh dang Ngay/Thang, kieu Tiên te, kieu So phu hop voi ung dung, khong can thiet lap lai." & vbCrLf _
               & "- Kieu ngày: " & FormatSDate & vbCrLf _
               & "- Kieu so  : 1" & FormatThou & "000" & FormatDec & "00", vbInformation, "Chuc mung!"
        DoCmd.OpenForm "frmMain"
        DoCmd.Close acForm, "frmSplash"
        Exit Sub
    End If


ChangeSysDatNumCur_Error:
    MsgBox "Loi khong xac dinh No. " & Err.Number & _
           " trong thu tuc [ChangeSysDatNumCur] cua form khoi dong. " _
           & vbCrLf & vbCrLf & Err.Description, 64, "Ung dung Access"
End Sub

Sub Change_LocaleInfo()

    Dim LCID As Long
    LCID = GetSystemDefaultLCID()

    'Thiet lap kieu Ngay/Thang
    SetLocaleInfo LCID, LOCALE_SLONGDATE, FormatLDate
    SetLocaleInfo LCID, LOCALE_SSHORTDATE, FormatSDate
  
    'Thiet lap kieu tien Currency
    SetLocaleInfo LCID, LOCALE_SCURRENCY, FormatCurrSymb
    SetLocaleInfo LCID, LOCALE_SMONDECIMALSEP, FormatDec
    SetLocaleInfo LCID, LOCALE_SMONTHOUSANDSEP, FormatThou
  
    'Thiet lap kieu so Number
    SetLocaleInfo LCID, LOCALE_SDECIMAL, FormatDec
    SetLocaleInfo LCID, LOCALE_STHOUSAND, FormatThou
  
    PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0

End Sub


Trong code có đoạn:

'RestartAccessApp.Restart True 'Khoi dong va Compact database Access


Bạn bỏ hoặc đổi thành cái Sub khởi động lại ứng dụng Excel của bạn nhé.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom