Asignar macros a teclas o combinación de teclas en Excel usando OnKey
Hace un par de semanas, un suscriptor de mi canal en Youtube me hizo la pregunta de cómo ejecutar una macro presionando la tecla Suprimir de nuestro teclado. Es por eso que me decidí a escribir este artículo y a grabar el video.
Ejemplos
Te mostraré 3 ejemplos en dónde usaremos el método OnKey para detectar cuando presionamos teclas en Excel:
Asignar macro a una tecla.
Asignar macro a una combinación de teclas.
Deshabilitar teclas y combinaciones de teclas.
Ver video Asignar macros a teclas o combinaciones de teclas
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Códigos para utilizar el método OnKey
Es importante identificar el código de las teclas que usaremos con el método OnKey
TECLA | CÓDIGO |
BACKSPACE | {BACKSPACE} or {BS} |
BREAK | {BREAK} |
CAPS LOCK | {CAPSLOCK} |
CLEAR | {CLEAR} |
DELETE or DEL | {DELETE} or {DEL} |
DOWN ARROW | {DOWN} |
END | {END} |
ENTER (numeric keypad) | {ENTER} |
ENTER | ~ (tilde) |
ESC | { ESCAPE} or {ESC} |
HELP | {HELP} |
HOME | {HOME} |
INS | {INSERT} |
LEFT ARROW | {LEFT} |
NUM LOCK | {NUMLOCK} |
PAGE DOWN | {PGDN} |
PAGE UP | {PGUP} |
RETURN | {RETURN} |
RIGHT ARROW | {RIGHT} |
SCROLL LOCK | {SCROLLLOCK} |
TAB | {TAB} |
UP ARROW | {UP} |
F1 through F15 | {F1} through {F15 |
Así como el código de las teclas que usaremos para combinar con otras teclas.
Tecla para combinar |
CÓDIGO |
SHIFT |
+ (signo de más) |
CTRL |
^ (acento circunflejo) |
ALT |
% (signo de porcentaje) |
Macro de prueba Pedir confirmación para borrar contenido de celda
Tenemos una macro de prueba que nos pide confirmación para borrar el contenido de una celda o un rango de celdas. Dicha macro la asignaremos al momento de presionar la tecla Suprimir. A continuación la macro:
Option Explicit 'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh Sub Eliminar() Dim Confirmacion As String 'Si la selección es un Rango If TypeName(Selection) = "Range" Then Confirmacion = MsgBox("Borrar contenido?", vbYesNo + vbQuestion) If Confirmacion = vbYes Then Selection.ClearContents Else End If Else 'Si la selección no es un rango elimina lo seleccionado Selection.Delete End If End Sub
Eventos Open y BeforeClose
Un evento es lanzado cuando sucede alguna acción en Excel. El evento Open se lanzará al momento de abrir el archivo y el evento BeforeClose se lanzará al cerrar el archivo. Abrimos el IDE de Visual Basic para aplicaciones con [Ctrl] + [F11] para mostrar ambos eventos.
Para mostrar el evento Open:
- Damos doble clic en el objeto ThisWorkbook.
- Damos clic en el combo que dice General.
- Elegimos Workbook.
Figura 1. Mostramos el evento Workbook_Open en Excel.
Para mostrar el evento BeforeClose damos clic en el Combo de la derecha.
Figura 2. Mostraremos el evento BeforeClose en Excel.
Ejemplo 1. Asignar macro a la tecla Suprimir.
El siguiente código vba irá dentro del evento Open, y será para asignar la macro Eliminar cuando se presione la tecla Suprimir.
Application.OnKey "{DEL}", "Eliminar"
Y el siguiente código será para devolver el comportamiento normal a la tecla Suprimir, es decir, que no lance la macro al momento de presionarla.
Application.OnKey "{DEL}"
Ahora, al momento de presionar la tecla Suprimir se lanzará la macro Eliminar. Hacemos una prueba con la aplicación Teclado en pantalla.
Figura 3. Al presionar Supr, nos pide confirmación para borrar el contenido.
Asignar macros a combinaciones de teclas
Ejemplo 2. Asignar macro a la combinación [Shift] + [Tecla derecha]
Application.OnKey "+{RIGHT}", "ShiftDerecha"
Ejemplo 3. Asignar macro a la combinación [Control] + [Tecla derecha]
Application.OnKey "^{RIGHT}", "ControlDerecha"
Ejemplo 4. Asignar macro a la combinación [Alt] + [Tecla derecha]
Application.OnKey "%{RIGHT}", "AltDerecha"
Ejemplo 5. Asignar macro a la combinación [Control] + [Shift] + [Tecla derecha]
Application.OnKey "^+{RIGHT}", "ControlShiftDerecha"
Ejemplo 6. Deshabilitar la combinación [Control] + [c] (copiar).
Application.OnKey "^{c}", ""
Restablecer teclas
Las siguientes macros ayudarán a que las combinaciones que asignamos en las macros anteriores regresen a su comportamiento normal.
Application.OnKey "{DEL}" Application.OnKey "+{RIGHT}" Application.OnKey "^{RIGHT}" Application.OnKey "%{RIGHT}" Application.OnKey "^+{RIGHT}" Application.OnKey "^{c}"
Eventos Activate y Deactivate
Y qué sucede cuando tenemos varios archivos abiertos pero queremos que estas asignaciones de macros sólo estén disponibles en determinado archivo? Ahí es donde debemos usar los eventos Activate y Deactive para que se lancen al momento de estar en un archivo y se restablezcan las teclas al momento de cambiarse a otro.
Private Sub Workbook_Activate() 'Al momento de activar el archivo AsignarMacros End Sub Private Sub Workbook_Deactivate() 'Al momento de cambiarse a otro archivo RestablecerTeclas End Sub
Descargar el archivo de ejemplo
Asignar macros a teclas o combinación de teclas en Excel usando OnKey.rar