propiedades - manual vba excel pdf
Eventos del editor VBA (2)
Si coloca el siguiente código al inicio de su aplicación, se ejecutará automáticamente Test2, siempre que presiona Alt + F11.
Private Sub Workbook_Open()
Application.OnKey "%{F11}", "Test2"
End Sub
Public Sub Test2()
Debug.Print "tested"
End Sub
No estoy seguro de si esto es exactamente lo que quiere, pero es un trabajo para lograrlo.
Editar: en realidad, aquí puede encontrar muchas cosas útiles: http://www.mrexcel.com/forum/excel-questions/468063-determine-language-user.html
Por ejemplo, con Sub ShowLanguages puedes construir una función que te diga qué idioma estás usando y si no es inglés, puedes cambiar a él, de la manera en que lo haces en tu respuesta. Probablemente construí algo similar más tarde.
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
Tengo algunos controles en el formulario MS Access que cambian el idioma del sistema a turco, árabe e inglés y quiero cambiar el idioma del sistema a inglés cuando voy a VBA para escribir algún código.
Tengo un código que cambia el idioma del sistema y quiero saber cómo ejecutar este código automáticamente cuando activo el editor de VBA.
Yo uso Timer para verificar si la ventana del editor de VBA es la ventana activa cada 0.5 segundos y si es verdad, ejecuto mi función que cambia el idioma al inglés y paro el temporizador:
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
Y ejecuto Timer nuevamente cuando cualquier control en mi formulario cambia el idioma a otro idioma:
Private Sub cmbAR_GotFocus()
ChLng 1025
Me.TimerInterval = 500
End Sub
Private Sub cmbTR_GotFocus()
ChLng 1055
Me.TimerInterval = 500
End Sub
En el diseño del formulario, agrego manualmente todos los eventos necesarios, incluido el evento de carga de formulario que ejecuta el temporizador:
Private Sub Form_Load()
Me.TimerInterval = 500
End Sub
NOTA: ChLng xxxx
es la función que cambia el idioma:
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