使用 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

未经测试,代码来自 https://www.access-programmers.co.uk/forums/threads/any-idea-how-to-change-system-keyboard-lenguage-with-vba.193030/

可能应该将 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