2011-12-21 47 views
12

Làm cách nào để biết ngôn ngữ người dùng hiện tại trong chương trình ?Tìm ngôn ngữ người dùng hiện tại

Tôi cần điều này để hiển thị biểu mẫu bằng ngôn ngữ thích hợp.

+0

@brettdj Tôi nghĩ sự chung chung hơn 'excel' luôn luôn là một thẻ hữu ích cũng như nó làm cho các tìm kiếm trong tương lai dễ dàng hơn. – Fionnuala

Trả lời

13

Mã ban đầu của tôi (sử dụng vbforum code) giả định rằng Windows và Excel có chung ngôn ngữ - có khả năng nhưng không chống đạn.

cập nhật

Mã sửa đổi:

  1. Trả về ID Locale (LCID).
  2. Tra cứu LCID từ số msft link này.
  3. Phân tích LCID bằng cách sử dụng để nhận ngôn ngữ.

Mẫu đầu ra trên máy tính của tôi dưới đây

Mã sẽ cho người dùng biết nếu có bất kỳ sai sót trong việc tiếp cận các trang web LCID, hoặc trong phân tích cú pháp tên quốc gia.

enter image description here

Sub GetXlLang() 
     Dim lngCode As Long 
     lngCode = Application.LanguageSettings.LanguageID(msoLanguageIDUI) 
     MsgBox "Code is: " & lngCode & vbNewLine & GetTxt(lngCode) 
    End Sub 

    Function GetTxt(ByVal lngCode) As String 
     Dim objXmlHTTP As Object 
     Dim objRegex As Object 
     Dim objRegMC As Object 
     Dim strResponse As String 
     Dim strSite As String 

     Set objXmlHTTP = CreateObject("MSXML2.XMLHTTP") 
     strSite = "http://msdn.microsoft.com/en-us/goglobal/bb964664" 

     On Error GoTo ErrHandler 
     With objXmlHTTP 
      .Open "GET", strSite, False 
      .Send 
      If .Status = 200 Then strResponse = .ResponseText 
     End With 
     On Error GoTo 0 

     strResponse = Replace(strResponse, "</td><td>", vbNullString) 
     Set objRegex = CreateObject("vbscript.regexp") 
     With objRegex 
      .Pattern = "><td>([a-zA-Z- ]+)[A-Fa-f0-9]{4}" & lngCode      
      If .Test(strResponse) Then 
       Set objRegMC = .Execute(strResponse) 
       GetTxt = objRegMC(0).submatches(0) 
      Else 
       GetTxt = "Value not found from " & strSite 
      End If 
     End With 
     Set objRegex = Nothing 
     Set objXmlHTTP = Nothing 
     Exit Function 
ErrHandler: 
     If Not objXmlHTTP Is Nothing Then Set objXmlHTTP = Nothing 
     GetTxt = strSite & " unable to be accessed" 
    End Function 
+1

Cảm ơn rất nhiều. Nó làm những gì tôi đang tìm kiếm. Tôi đã thay thế LOCALE_SNATIVELANGNAME = & H4 bằng LOCALE_SISO639LANGNAME = & H59 để nhận giá trị độc lập tại địa phương. – BetaRide

+1

Bạn có thể hướng dẫn tôi về cách hiển thị ngôn ngữ thích hợp sau khi xác định vị trí ... nếu bạn có các tệp tài nguyên khác nhau ... thì làm cách nào để tạo các tệp này trong trình soạn thảo VBA excel ... ??? –

9
dim lang_code as long 
lang_code = Application.LanguageSettings.LanguageID(msoLanguageIDUI) 
+0

Cảm ơn, điều đó hoạt động. Nhưng tôi chỉ nhận được một số. Làm cách nào tôi có thể tìm ra ngôn ngữ thực mà con số này đại diện cho? – BetaRide

+7

Bạn có thể tìm danh sách các LCID tại đây http://msdn.microsoft.com/en-us/goglobal/bb964664 –

Các vấn đề liên quan