我在MS Access窗体中有一些控件,用于将系统语言更改为土耳其语,阿拉伯语和英语,并且当我去VBA编写代码时,我想将系统语言更改为英语。VBA编辑器事件
我有一个更改系统语言并想知道的代码 如何激活VBA编辑器时自动运行此代码?
我在MS Access窗体中有一些控件,用于将系统语言更改为土耳其语,阿拉伯语和英语,并且当我去VBA编写代码时,我想将系统语言更改为英语。VBA编辑器事件
我有一个更改系统语言并想知道的代码 如何激活VBA编辑器时自动运行此代码?
如果您在应用程序的开始处放置了以下代码,那么只要按Alt + F11键,它就会自动运行Test2。
Private Sub Workbook_Open()
Application.OnKey "%{F11}", "Test2"
End Sub
Public Sub Test2()
Debug.Print "tested"
End Sub
我不确定这是否正是你想要的,但它是一个解决方法来实现它。
编辑: 其实,在这里你可以找到很多有用的东西: http://www.mrexcel.com/forum/excel-questions/468063-determine-language-user.html
例如使用Sub ShowLanguages,你可以建立一个功能,告诉你你正在使用哪种语言,如果它不是英语,你可以切换到它,就像你在答案中做的那样。我可能会在稍后建立类似的东西。
Private Const LOCALE_ILANGUAGE As Long = &H1
Private Const LOCALE_SCOUNTRY As Long = &H6
Private Declare Function GetKeyboardLayout Lib "user32" _
(ByVal dwLayout As Long) As Long
Private Declare Function GetLocaleInfo Lib "kernel32" _
Alias "GetLocaleInfoA" _
(ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long) As Long
Public Sub ShowLangauges()
Dim hKeyboardID As Long
Dim LCID As Long
hKeyboardID = GetKeyboardLayout(0&)
If hKeyboardID > 0 Then
LCID = LoWord(hKeyboardID)
Debug.Print GetUserLocaleInfo(LCID, LOCALE_ILANGUAGE)
Debug.Print GetUserLocaleInfo(LCID, LOCALE_SCOUNTRY)
End If
End Sub
Private Function LoWord(wParam As Long) As Integer
If wParam And &H8000& Then
LoWord = &H8000& Or (wParam And &H7FFF&)
Else
LoWord = wParam And &HFFFF&
End If
End Function
Public Function GetUserLocaleInfo(ByVal dwLocaleID As Long, _
ByVal dwLCType As Long) As String
Dim sReturn As String
Dim nSize As Long
nSize = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
If nSize > 0 Then
sReturn = Space$(nSize)
nSize = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
If nSize > 0 Then
GetUserLocaleInfo = Left$(sReturn, nSize - 1)
End If
End If
End Function
我使用Timer来检查是否VBA编辑器窗口是活动窗口,每0.5秒,如果真我跑我的函数的语言更改为英语,并停止计时器:
Private Sub Form_Timer()
Dim st As String
On Error Resume Next
st = VBE.ActiveWindow.Caption
If Err = 0 Then
ChLng 1033
Me.TimerInterval = 0
End If
On Error GoTo 0
End Sub
我跑计时器再次当我的窗体上的任何控制来改变语言非英语语言:
Private Sub cmbAR_GotFocus()
ChLng 1025
Me.TimerInterval = 500
End Sub
Private Sub cmbTR_GotFocus()
ChLng 1055
Me.TimerInterval = 500
End Sub
在外形设计我手动添加所需的所有活动,包括Form Load事件中运行定时器:
Private Sub Form_Load()
Me.TimerInterval = 500
End Sub
注:ChLng xxxx
是改变语言的功能:
Private Declare Function ActivateKeyboardLayout Lib _
"user32.dll" (ByVal myLanguage As Long, Flag As Boolean) As Long
'define your desired keyboardlanguage
'find your desired language at http://www.trigeminal.com/frmrpt2dap.asp
Sub ChLng(lng As Long)
ActivateKeyboardLayout lng, 0
End Sub
感谢您Vityata,但我不会用'ALT + F11'激活我用鼠标VBA编辑器。但是如果没有办法激发VBA编辑器的激活事件,这个答案是很好的解决方法。 – Fadi
如果你找到另一种方式,在答案中标记我:) – Vityata
当然,如果我没有找到另一种方式,我会接受你的答案,再次感谢你。 – Fadi