lunes, 11 de abril de 2022

Como programar con macros las teclas KeyCode de ASCII en Userfom con eventos KeyPress y KeyDown

    La practica tiene como objetivo saber que tecla estamos presionando según sea el caso, al mismo tiempo obtendremos el valor KeyCode de ASCII para saber el numero que debemos utilizar si se desea programar teclas en aplicaciones futuras.
Primeramente debemos comprender tres cosas:

1.Definir que control se desea programar.
2.Seleccionar el evento correcto para que funcione de manera eficiente.
3.Seleccionar el KeyCode correcto.

La sintaxis es la siguiente:

Sintaxis básica de programación de teclas

    Ahora para entender los KeyCode, eventos y controles mas usados programaremos un Userform como se muestra:

Formulario de controles, KeyCode y eventos comunes en Userform

Una vez creado nuestro formulario en el escribimos el siguiente código:

Private Sub UserForm_Initialize()
Me.ListBox1.AddItem "PRESIONA LA TECLA PAGE UP"
Me.ListBox1.AddItem "PRESIONA LA TECLA PAGE DOWN"
Me.ListBox1.AddItem "PRESIONA LA TECLA END"
Me.ListBox1.AddItem "PRESIONA LA TECLA HOME"
Me.ListBox1.AddItem "PRESIONA LA TECLA FLECHA IZQUIERDA"
Me.ListBox1.AddItem "PRECIONA LA TECLA FLECHA ARRIBA"
Me.ListBox1.AddItem "PRECIONA LA TECLA FLECHA DERECHA"
Me.ListBox1.AddItem "PRECIONA LA TECLA FLECHA ABAJO"
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
UserForm1.Caption = "Has presionado la tecla en ASCII: " & KeyAscii
End Sub
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 112 Then UserForm1.Caption = "Has presionado la tecla F1 en ASCII:112"
If KeyCode = 113 Then UserForm1.Caption = "Has presionado la tecla F2 en ASCII:113"
If KeyCode = 114 Then UserForm1.Caption = "Has presionado la tecla F3 en ASCII:114"
If KeyCode = 115 Then UserForm1.Caption = "Has presionado la tecla F4 en ASCII: 115"
If KeyCode = 116 Then UserForm1.Caption = "Has presionado la tecla F5 en ASCII: 116"
If KeyCode = 117 Then UserForm1.Caption = "Has presionado la tecla F6 en ASCII: 117"
If KeyCode = 118 Then UserForm1.Caption = "Has presionado la tecla F7 en ASCII: 118"
If KeyCode = 119 Then UserForm1.Caption = "Has presionado la tecla F8 en ASCII: 119"
If KeyCode = 120 Then UserForm1.Caption = "Has presionado la tecla F9 en ASCII: 120"
If KeyCode = 121 Then UserForm1.Caption = "Has presionado la tecla F10 en ASCII: 121"
If KeyCode = 122 Then UserForm1.Caption = "Has presionado la tecla F11 en ASCII: 122"
If KeyCode = 123 Then UserForm1.Caption = "Has presionado la tecla F12 en ASCII: 123"
End Sub
Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 9 Then UserForm1.Caption = "Has presionado la tecla TAB en ASCII:9"
If KeyCode = 13 Then UserForm1.Caption = "Has presionado la tecla ENTER en ASCII:13"
End Sub
Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 8 Then
    If ListBox1.ListIndex <> -1 Then
        ListBox1.RemoveItem ListBox1.ListIndex
        UserForm1.Caption = "Has presionado la tecla en ASCII: 8"
    Else
        MsgBox "No hay nada que eliminar", vbExclamation, "Info"
    End If
End If
If KeyCode = 46 Then
    If ListBox1.ListIndex <> -1 Then
        ListBox1.RemoveItem ListBox1.ListIndex
        UserForm1.Caption = "Has presionado la tecla en ASCII: 46"
    Else
        MsgBox "No hay nada que eliminar", vbExclamation, "Info"
    End If
End If
If KeyCode = 33 Then UserForm1.Caption = "Has presionado la tecla PAGINA ARRIBA ASCII:33"
If KeyCode = 34 Then UserForm1.Caption = "Has presionado la tecla PAGINA ABAJO ASCII:34"
If KeyCode = 35 Then UserForm1.Caption = "Has presionado la tecla END ASCII:35"
If KeyCode = 36 Then UserForm1.Caption = "Has presionado la tecla HOME ASCII:36"
If KeyCode = 37 Then UserForm1.Caption = "Has presionado la tecla FECHA IZQUIERDA ASCII:37"
If KeyCode = 38 Then UserForm1.Caption = "Has presionado la tecla FLECHA ARRIBA ASCII:38"
If KeyCode = 39 Then UserForm1.Caption = "Has presionado la tecla FLECHA DERECHA ASCII:39"
If KeyCode = 40 Then UserForm1.Caption = "Has presionado la tecla FLECHA ABAJO ASCII:40"
End Sub

Si todo marca bien deberás ejecutar el formulario con F5.

Deberás posicionarte sobre cualquier control y presionar la tecla que se te indica. Observa en la barra de titulo del formulario te dirá el valor de la tecla que presionaste.

    Es importante recalcar que existen diferentes eventos dentro de vba excel que podemos utilizar tales como:
  • KeyDown.
  • KeyPress.
  • KeyUp.
Aquí les comparto la lista mas común de KeyCode:

Teclas y KeyCode comunes













No hay comentarios.:

Publicar un comentario