使用 VBA 切换键盘语言
Switch the keyboard language with VBA
我有一个多语言数据库,我正在尝试使用“on current”事件在正确的字段中输入正确的语言。目前,用户使用 Alt+Shift 直到语言出现在任务栏中。语言是英语、希伯来语、阿拉伯语和德语。用户是语言流利的打字员。不断地 Alt+Shifting 到 select 每个字段的正确语言会显着减慢数据输入速度。
我在互联网上搜索了 VBA 代码来执行此操作。我能找到的最接近的是“Sendkeys”,它部分地通过关闭和打开仅用于希伯来语元音指向的自动热键的滚动锁定来工作,但我无法弄清楚如何通过 select 键盘语言 VBA代码。
希伯来名字搜索按钮的示例代码:
Private Sub btnHebCustomerSearch()
SendKeys "{scrolllock}", True
Me.FilterOn = False
DoCmd.GoToRecord , "", acFirst
DoCmd.RunCommand acCmdFind
On Error Resume Next
End Sub
我通过 Bing 搜索“访问 VBA 切换键盘语言”找到了大量关于此主题的网络资源。
使用API函数:
Private Declare PtrSafe 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
Private Const MKD = 1071 'macedonian keyboard language layout
Private Const eng = 1033 'english(united states)keyboard language layout
Private Sub A_Enter()
Call ActivateKeyboardLayout(MKD, 0)
End Sub
Private Sub A_Exit(Cancel As Integer)
Call ActivateKeyboardLayout(eng, 0)
End Sub
可能应该将 API 函数声明为 Public 并将其放在通用模块中而不是在表单后面。如果使用固有语言代码常量,则不需要 Const 声明。在 VBA 对象浏览器中查看列表。在搜索框中键入 MsoLanguageID,然后单击搜索按钮。 https://docs.microsoft.com/en-us/office/vba/api/access.application.languagesettings
这是最终有效的代码,感谢 June7 的帮助,您指引了我正确的方向:
Option Compare Database
Private Declare PtrSafe Function ActivateKeyboardLayout Lib "user32.dll" (ByVal mylanguage As Long, flag As Boolean) As Long
Private Const Heb = 1037
Private Const Eng = 1033
Private Const Ger = 1031
Private Const Grk = 1032
Private Const Yid = 1085
Private Sub Text2_Enter() 'Hebrew Keyboard Layout
Call ActivateKeyboardLayout(Heb, True)
End Sub
Private Sub Text2_Exit(Cancel As Integer)
Call ActivateKeyboardLayout(Eng, True)
End Sub
我有一个多语言数据库,我正在尝试使用“on current”事件在正确的字段中输入正确的语言。目前,用户使用 Alt+Shift 直到语言出现在任务栏中。语言是英语、希伯来语、阿拉伯语和德语。用户是语言流利的打字员。不断地 Alt+Shifting 到 select 每个字段的正确语言会显着减慢数据输入速度。
我在互联网上搜索了 VBA 代码来执行此操作。我能找到的最接近的是“Sendkeys”,它部分地通过关闭和打开仅用于希伯来语元音指向的自动热键的滚动锁定来工作,但我无法弄清楚如何通过 select 键盘语言 VBA代码。
希伯来名字搜索按钮的示例代码:
Private Sub btnHebCustomerSearch()
SendKeys "{scrolllock}", True
Me.FilterOn = False
DoCmd.GoToRecord , "", acFirst
DoCmd.RunCommand acCmdFind
On Error Resume Next
End Sub
我通过 Bing 搜索“访问 VBA 切换键盘语言”找到了大量关于此主题的网络资源。
使用API函数:
Private Declare PtrSafe 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
Private Const MKD = 1071 'macedonian keyboard language layout
Private Const eng = 1033 'english(united states)keyboard language layout
Private Sub A_Enter()
Call ActivateKeyboardLayout(MKD, 0)
End Sub
Private Sub A_Exit(Cancel As Integer)
Call ActivateKeyboardLayout(eng, 0)
End Sub
可能应该将 API 函数声明为 Public 并将其放在通用模块中而不是在表单后面。如果使用固有语言代码常量,则不需要 Const 声明。在 VBA 对象浏览器中查看列表。在搜索框中键入 MsoLanguageID,然后单击搜索按钮。 https://docs.microsoft.com/en-us/office/vba/api/access.application.languagesettings
这是最终有效的代码,感谢 June7 的帮助,您指引了我正确的方向:
Option Compare Database
Private Declare PtrSafe Function ActivateKeyboardLayout Lib "user32.dll" (ByVal mylanguage As Long, flag As Boolean) As Long
Private Const Heb = 1037
Private Const Eng = 1033
Private Const Ger = 1031
Private Const Grk = 1032
Private Const Yid = 1085
Private Sub Text2_Enter() 'Hebrew Keyboard Layout
Call ActivateKeyboardLayout(Heb, True)
End Sub
Private Sub Text2_Exit(Cancel As Integer)
Call ActivateKeyboardLayout(Eng, True)
End Sub