2016-11-07 103 views
2

我在MS Access窗體中有一些控件,用於將系統語言更改爲土耳其語,阿拉伯語和英語,並且當我去VBA編寫代碼時,我想將系統語言更改爲英語。VBA編輯器事件

我有一個更改系統語言並想知道的代碼 如何激活VBA編輯器時自動運行此代碼?

回答

2

如果您在應用程序的開始處放置了以下代碼,那麼只要按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 
+0

感謝您Vityata,但我不會用'ALT + F11'激活我用鼠標VBA編輯器。但是如果沒有辦法激發VBA編輯器的激活事件,這個答案是很好的解決方法。 – Fadi

+1

如果你找到另一種方式,在答案中標記我:) – Vityata

+1

當然,如果我沒有找到另一種方式,我會接受你的答案,再次感謝你。 – Fadi

2

我使用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 
+1

感謝發佈。 ChLng 1033的外觀如何? – Vityata

+1

@ Vityata,我發現它在網絡中,但我不記得在哪裏。我編輯答案,再次感謝你。 – Fadi