2016-11-07 5 views
2

У меня есть элементы управления в форме MS Access, которые меняют язык системы на турецкий, арабский и английский языки, и я хочу изменить системный язык на английский, когда я перехожу в VBA, чтобы написать код.События редактора VBA

У меня есть код, который меняет системный язык и хочет знать Как запустить этот код автоматически при активации редактора VBA?

ответ

2

Если вы поместите следующий код в начало вашего приложения, он будет автоматически запускать Test2, всякий раз, когда вы нажимаете Alt + F11.

Private Sub Workbook_Open() 

    Application.OnKey "%{F11}", "Test2" 

End Sub 


Public Sub Test2() 

    Debug.Print "tested" 

End Sub 

Я не уверен, что это именно то, что вы хотите, но для достижения этой цели это работа.

Edit: На самом деле, здесь вы можете найти много полезных вещей: 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

Я использую таймер, чтобы проверить, если окно редактора 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 

в дизайне формы I вручную добавить все необходимые мероприятия, включая события загрузки формы, которые работают Таймер:

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

Смежные вопросы