Excel - KeyPreview

 
Vista:
Imágen de perfil de Juan Carlos

KeyPreview

Publicado por Juan Carlos (15 intervenciones) el 25/07/2007 00:59:44
Hola amigos de LWP
Quiero manipular un UserForm desde el teclado pero no encuentro la propiedad KeyPreview en la ventana de propiedades , como habitualmente aparece en VB, para habilitarla. ¿Quién me tira una soga?
Gracias
Cordialmente
Juan Carlos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:KeyPreview

Publicado por Abraham Valencia (2415 intervenciones) el 25/07/2007 17:31:26
Primero, recordar que no es lo mismo VBA que VB. Segundo, si nos dices que es lo que necesitas te podriamos ayudar a solucionarlo. Ah, me olvidadba, lo formularios de VBA no tienen esa propiedad.

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Carlos

RE:KeyPreview

Publicado por Juan Carlos (15 intervenciones) el 26/07/2007 03:48:06
Gracias Abraham por tu respuesta
Ok a todo lo manifestado.
Bien, una de la acciones que deseaba era cerrar el formulario desde el teclado con ESC (ascii =27), o bien utlizar ascii 13 para activar un commandbutton que entra datos , etc. Es cierto que con VB lo puedo hacer y contemplaba esa posibilidad para un form en excel.
Te agradezco lo que me puedas indicar.
Cordialmente
Juan Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Abraham Valencia
Val: 313
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

RE:KeyPreview

Publicado por Abraham Valencia (2415 intervenciones) el 26/07/2007 17:10:21
Hola amigo. Los formularios de VBa del excel, tienen el evento KeyPress, con el que conseguira lo que deseas, por ejemplo:

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then
MsgBox "Has presionado ESC"
End If
End Sub

Al presionar ESC sale un msgbox

Abraham
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:KeyPreview

Publicado por JuanC (792 intervenciones) el 26/07/2007 21:31:39
Aquí va el plan "B"...

Código para el UserForm:

Private Sub UserForm_Initialize()
Call HookForm(Me)
End Sub

Código para un módulo:

Option Explicit
Option Private Module

'//By JuanC - 26 de Julio 2007

Private Declare Function apiSetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function apiSendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function apiCallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function apiFindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function apiRegisterHotKey Lib "user32" Alias "RegisterHotKey" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function apiUnregisterHotKey Lib "user32" Alias "UnregisterHotKey" (ByVal hWnd As Long, ByVal id As Long) As Long
Private Declare Function apiGlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString As String) As Long
Private Declare Function apiGlobalDeleteAtom Lib "kernel32" Alias "GlobalDeleteAtom" (ByVal nAtom As Long) As Long

Private Const GWL_WNDPROC = (-4)

Private Const WM_HOTKEY = &H312
Private Const WM_SYSCOMMAND = &H112

Private Const SC_CLOSE = &HF060

Private Const VK_ESCAPE = &H1B

Private m_OldWndProc As Long
Private m_hWnd As Long
Private m_idHotKeyEsc As Long

Private Function WindowProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case Msg
Case WM_HOTKEY
Select Case wParam
Case m_idHotKeyEsc
Call apiUnregisterHotKey(hWnd, m_idHotKeyEsc)
Call apiGlobalDeleteAtom(m_idHotKeyEsc)
Call apiSendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0)
End Select
End Select

WindowProc = apiCallWindowProc(m_OldWndProc, hWnd, Msg, wParam, lParam)
End Function

Public Sub HookForm(ByVal frm As Object)
m_hWnd = 0

If Val(Application.Version) < 9 Then
m_hWnd = apiFindWindow("ThunderXFrame", frm.Caption)
Else
m_hWnd = apiFindWindow("ThunderDFrame", frm.Caption)
End If

If m_hWnd = 0 Then Exit Sub

m_idHotKeyEsc = apiGlobalAddAtom(CStr(Date & Time))
Call apiRegisterHotKey(m_hWnd, m_idHotKeyEsc, 0, VK_ESCAPE)
m_OldWndProc = apiSetWindowLong(m_hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:KeyPreview

Publicado por Anonimo (69 intervenciones) el 26/07/2007 23:58:01
............. so no hace naa pis.......................... naa de naa
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Carlos

RE:KeyPreview

Publicado por Juan Carlos (15 intervenciones) el 27/07/2007 07:31:07
Hola Anónimo
No interpreto tu mensaje
Gracias
Juan Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Carlos

RE:KeyPreview-Juan C

Publicado por Juan Carlos (15 intervenciones) el 27/07/2007 07:28:17
Gracias Juan
Probé el plan "B", pero se colgó el programa. no supuse que había que incluir Api's. Voy reveer la cosa
Cordiamente
Juan Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan Carlos

RE:KeyPreview-no funca

Publicado por Juan Carlos (15 intervenciones) el 27/07/2007 07:15:44
Gracias Abraham
El evento está pero no funciona. Ya había probado con el código que me indicas, evidentemente algo estoy omitiendo
Gracias de todos modos
Juan Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar