Code VBA xác định format hiện tại của hệ thống (hệ điều hành)

  • Thread starter Thread starter LEHOC
  • Ngày gửi Ngày gửi
Liên hệ QC

LEHOC

Thành viên chính thức
Tham gia
11/1/17
Bài viết
89
Được thích
0
Em chào các anh/chị!
Anh/chị cho em hỏi VBA có thể xác định được Format hiện tại của windows không ạ?
Format như trong ảnh dưới ạ :
223666
Nếu có thì code như thế nào ạ?
Em cảm ơn!
 
Cái bạn hỏi có thể đọc ra bằng hàm API GetUserDefaultLangID. Với thiết lập như trên hình thì nó sẽ trả về 1066 = &H42A. Nhưng còn một cái là GetSystemDefaultLangID.

Trong CP chỗ bạn chỉ bạn có thể thiết lập (chọn) khác đi. Lúc đó GetUserDefaultLangID sẽ trả về kết quả khác. Vd. bạn chọn Polish thì GetUserDefaultLangID bây giờ trả về 1045. Nhưng với hàm GetSystemDefaultLangID thì lại khác. Bạn có thể chọn chỗ như trên hình thế nào chăng nữa thì GetSystemDefaultLangID luôn trả về giá trị như nhau.

Tôi cho vd. Sau khi tôi cài Windows phiên bản Ba Lan thì ở chỗ hình mà bạn hỏi tôi có Polski (Polish) và cả GetSystemDefaultLangID lẫn GetUserDefaultLangID đều trả về 1045. Bây giờ tôi vào chỗ ở hình và chọn Wietnamski (Vietnamese) thì GetSystemDefaultLangID vẫn trả về 1045 còn GetUserDefaultLangID trả về 1066.

Về code ở bài trước của tôi thì thế nào? Nếu bạn nhìn thấy trong MsgBox y như trong A1 thì chụp cho tôi màn hình MsgBox. Bạn hỏi tôi nhưng tôi cũng tò mò. Sao bạn không cho biết kết quả? Còn nếu bây giờ nhìn thấy "đầu trâu mặt ngựa" thì cũng nên nói một lời cho mọi người biết.

Tôi cũng có ý nghĩ về Format nhưng rõ ràng chuỗi s ở trên của tôi là chuỗi unicode chứ không phải chuỗi ANSI trong Windows-1258.
 
Lần chỉnh sửa cuối:
Upvote 0
Cái bạn hỏi có thể đọc ra bằng hàm API GetUserDefaultLangID. Với thiết lập như trên hình thì nó sẽ trả về 1066 = &H42A. Nhưng còn một cái là GetSystemDefaultLangID.

Trong CP chỗ bạn chỉ bạn có thể thiết lập (chọn) khác đi. Lúc đó GetUserDefaultLangID sẽ trả về kết quả khác. Vd. bạn chọn Polish thì GetUserDefaultLangID bây giờ trả về 1045. Nhưng với hàm GetSystemDefaultLangID thì lại khác. Bạn có thể chọn chỗ như trên hình thế nào chăng nữa thì GetSystemDefaultLangID luôn trả về giá trị như nhau.

Tôi cho vd. Sau khi tôi cài Windows phiên bản Ba Lan thì ở chỗ hình mà bạn hỏi tôi có Polski (Polish) và cả GetSystemDefaultLangID lẫn GetUserDefaultLangID đều trả về 1045. Bây giờ tôi vào chỗ ở hình và chọn Wietnamski (Vietnamese) thì GetSystemDefaultLangID vẫn trả về 1045 còn GetUserDefaultLangID trả về 1066.

Về code ở bài trước của tôi thì thế nào? Nếu bạn nhìn thấy trong MsgBox y như trong A1 thì chụp cho tôi màn hình MsgBox. Bạn hỏi tôi nhưng tôi cũng tò mò. Sao bạn không cho biết kết quả? Còn nếu bây giờ nhìn thấy "đầu trâu mặt ngựa" thì cũng nên nói một lời cho mọi người biết.

Tôi cũng có ý nghĩ về Format nhưng rõ ràng chuỗi s ở trên của tôi là chuỗi unicode chứ không phải chuỗi ANSI trong Windows-1258.
Anh cho em xin API đó được không ạ, em có tìm trên mạng mà không thấy
 
Upvote 0
Anh cho em xin API đó được không ạ, em có tìm trên mạng mà không thấy
quên viết một chỗ. Nếu bạn chuyển sang thẻ Administrative -> mục Language for non-Unicode programs
thì bạn thấy có 1 ngôn ngữ đang được chọn. GetSystemDefaultLangID trả về giá trị cho thiết lập này. Tức nếu bạn thay đổi (chọn) gì ở đây thì GetSystemDefaultLangID sẽ trả về cho thiết lập hiện hành (system locale).

GetUserDefaultLangID trả về giá trị tương ứng cho thiết lập ở thẻ Formats.

Mã:
#If VBA7 Then
    Private Declare PtrSafe Function GetUserDefaultLangID Lib "kernel32" () As Integer
    Private Declare PtrSafe Function GetSystemDefaultLangID Lib "kernel32" () As Integer
#Else
    Private Declare Function GetUserDefaultLangID Lib "kernel32.dll" () As Integer
    Private Declare Function GetSystemDefaultLangID Lib "kernel32.dll" () As Integer
#End If

Sub test()
    MsgBox "GetUserDefaultLangID = " & GetUserDefaultLangID
    MsgBox "GetSystemDefaultLangID = " & GetSystemDefaultLangID
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom