Page 1 of 1

สอบถาม Code VB เช็คค่า System Locale

Posted: Sat Oct 11, 2025 10:13 am
by tigerwit
จากไฟล์ที่แนบมา

Code: Select all

Sub CheckSystemLocale()
    Dim lang_code As Long
    ' Get the LCID of the user interface language
    lang_code = Application.LanguageSettings.LanguageID(msoLanguageIDUI)
    
    ' Display the LCID
    MsgBox "The system UI locale LCID is: " & lang_code
    
    ' You can then use this LCID in conditional statements
    If lang_code = 1033 Then ' 1033 is English (US)
        MsgBox "The system locale is English (US)."
    ElseIf lang_code = 1054 Then ' 1054 is Thai (Thailand)
        MsgBox "The system locale is Thai (Thailand)."
    Else
        MsgBox "The system locale is not English (US) or Thai (Thailand)."
    End If
End Sub
ผมต้องเช็คค่า System Locale ของเครื่องคอมพิวเตอร์ที่ใช้งานอยู่ตอนนี้ว่าตั้งค่าเป็นประเทศอะไร โดยได้ทดลองตั้งเป็น English (USA) แต่พอรัน Code กลับบอกว่าเป็น Thai (Thailand)
จะต้องปรับแก้อย่างไรครับ

Re: สอบถาม Code VB เช็คค่า System Locale

Posted: Sat Oct 11, 2025 10:48 am
by snasui
:D ปัญหานั้นเนื่องจาก Application.LanguageSettings.LanguageID(msoLanguageIDUI) จะคืนค่า LCID ของ User Interface (UI) ของ Excel ไม่ใช่ System Locale ของ Windows โดยตรง ดังนั้นแม้จะตั้งค่า Windows เป็น English (USA) แต่ถ้า Excel ยังใช้ UI ภาษาไทย ก็จะได้ค่า LCID = 1054 (Thai)

ถ้าต้องการตรวจสอบ System Locale ของ Windows จริง ๆ (ไม่ใช่แค่ UI ของ Excel) ต้องใช้ Windows API ผ่าน VBA ดังนี้ครับ

Code: Select all

#If VBA7 Then
    Private Declare PtrSafe Function GetSystemDefaultLCID Lib "kernel32" () As Long
#Else
    Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
#End If

Sub CheckSystemLocale()
    Dim sysLCID As Long
    sysLCID = GetSystemDefaultLCID()
    
    MsgBox "System Locale LCID is: " & sysLCID
    
    Select Case sysLCID
        Case 1033
            MsgBox "System Locale is English (US)"
        Case 1054
            MsgBox "System Locale is Thai (Thailand)"
        Case Else
            MsgBox "System Locale is not English (US) or Thai (Thailand)"
    End Select
End Sub