현재 사용자 언어 찾기
vba 프로그램에서 현재 사용자 언어를 어떻게 알 수 있습니까?
적절한 언어로 양식을 표시하려면 이것이 필요합니다.
저의 초기 코드(이 vbforum 코드를 사용하여)는 Windows와 Excel이 공통 언어를 공유한다고 가정했습니다(방탄이 아닐 가능성이 있음).
갱신된
개정된 코드:
아래 내 컴퓨터의 샘플 출력
코드는 사용자에게 LCID 웹 사이트에 액세스하거나 국가 이름을 구문 분석하는 데 오류가 있는지 알려줍니다.
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
dim lang_code as long
lang_code = Application.LanguageSettings.LanguageID(msoLanguageIDUI)
이것은 brettdj가 게시한 코드의 또 다른 변형입니다.
Sub Test_GetLocale_UDF()
Dim lngCode As Long
lngCode = Application.LanguageSettings.LanguageID(msoLanguageIDUI)
MsgBox "Code Is: " & lngCode & vbNewLine & GetLocale(lngCode)
End Sub
Function GetLocale(ByVal lngCode) As String
Dim html As Object
Dim http As Object
Dim htmlTable As Object
Dim htmlRow As Object
Dim htmlCell As Object
Dim url As String
Set html = CreateObject("htmlfile")
Set http = CreateObject("MSXML2.XMLHTTP")
url = "https://www.science.co.il/language/Locale-codes.php"
On Error GoTo ErrHandler
With http
.Open "GET", url, False
.send
If .Status = 200 Then html.body.innerHTML = .responseText
End With
On Error GoTo 0
Set htmlTable = html.getElementsByTagName("table")(0)
For Each htmlRow In htmlTable.getElementsByTagName("tr")
For Each htmlCell In htmlRow.Children
If htmlCell.innerText = CStr(lngCode) Then
GetLocale = htmlRow.getElementsByTagName("td")(0).innerText
Exit For
End If
Next htmlCell
Next htmlRow
If GetLocale = "" Then GetLocale = "Value Not Found From " & url
Exit Function
ErrHandler:
If Not http Is Nothing Then Set http = Nothing
GetLocale = url & " Unable To Be Accessed"
End Function
Select Case Application.International(xlApplicationInternational.xlCountryCode)
Case 1: Call MsgBox("English")
Case 33: Call MsgBox("French")
Case 49: Call MsgBox("German")
Case 81: Call MsgBox("Japanese")
End Select
바로 여기서: https://bettersolutions.com/vba/macros/region-language.htm
관련 문서: https://learn.microsoft.com/en-us/office/vba/api/excel.xlapplicationinternational
VBAApplication.LanguageSettings.LanguageID(msoLanguageIDUI)
Microsoft Office Access 또는 Microsoft Excel 사용자 인터페이스 언어만 가져옵니다.그러나 Windows 디스플레이에 사용되는 Windows 시스템 표시 언어를 모두 반영하지는 않습니다.MsgBox()
단추 등
사용자가 Windows 제어판을 통해 Windows 디스플레이 언어를 변경해도 이 응용 프로그램 수준 설정은 변경되지 않습니다.이 경우 이 커널 dll 함수를 사용하여 VBA 모듈에 다음 코드가 있는 새 LCID(Microsoft Language Code IDentifier, 1036=French, 1033=English, ...)를 가져올 수 있습니다.
Private Declare Function GetUserDefaultUILanguage Lib "kernel32.dll" () As Long
Public Function winGetUserDefaultUILanguage()
winGetUserDefaultUILanguage = GetUserDefaultUILanguage()
End Function
그러면 공공 기관에 전화를 걸 수 있습니다.winGetUserDefaultUILanguage()
VBA 코드의 모든 곳에서 Windows LCID를 가져옵니다.
커널 dll 함수GetUserDefaultUILanguage()
에서는 Windows 표시 언어 ID를 통한 변경 내용을 반영합니다.
예를 들어, 프랑스어 Windows 표시 언어인 LCID=1036을 사용하고 있으므로, 내 사무실도 프랑스어(LCID=1036)로 되어 있습니다.
VBA 디버거 콘솔:
이제 제어판(LCID=1033(영어)을 통해 영어 Windows 표시 언어로 전환하지만 내 Office 언어 ID는 변경되지 않습니다(LCID=1036).
VBA 디버거 콘솔:
LCID에서 Microsoft API 문서에서 언어 태그, 언어 이름을 추가로 얻을 수 있습니다.
언급URL : https://stackoverflow.com/questions/8588728/find-the-current-user-language
'programing' 카테고리의 다른 글
Oracle 중단 프로세스 문제 해결 (0) | 2023.06.20 |
---|---|
MongoDB $pull을 사용하여 배열 내의 문서 삭제 (0) | 2023.06.20 |
그룹별 변수의 최소값에 해당하는 행 추출 (0) | 2023.06.20 |
i == (i = 2)의 결과는 무엇입니까? (0) | 2023.06.20 |
형식 암시의 하위 클래스 (0) | 2023.06.20 |