2011-12-21 65 views
12

如何在程序中告诉当前用户的语言?查找当前用户的语言

我需要这个以适当的语言显示表单。

+0

@brettdj我认为比较通用的'excel'始终是一个有用的标签,以及它使未来的搜索更加容易。 – Fionnuala 2011-12-22 13:39:21

回答

13

我最初的代码(利用这种vbforum code)假设的Windows和Excel都有一个共同的语言 - 可能但不是防弹。

更新

修改后的代码:

  1. 返回区域设置ID(LCID)。
  2. 从这个msft link查找LCID。
  3. 使用解析LCID以获取语言。我的机器上

样本输出以下

的代码将让用户知道,如果有,或解析国名在访问LCID网站的任何错误。

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

非常感谢。它符合我的要求。我将LOCALE_SNATIVELANGNAME =&H4替换为LOCALE_SISO639LANGNAME =&H59以获得本地独立值。 – BetaRide 2011-12-21 13:12:38

+1

你能指导我如何在识别位置后显示适当的语言......如果你有不同的资源文件......那么如何使这些文件在Excel的VBA编辑器中...... ??? – 2012-11-29 07:18:42

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

谢谢,这是有效的。但我只是得到一个数字。我如何才能找出这个数字代表的真实语言? – BetaRide 2011-12-21 11:09:30

+7

您可以在这里找到LCID列表http://msdn.microsoft.com/en-us/goglobal/bb964664 – 2011-12-21 17:13:29