Cómo asignar una macro a una tecla o conjunto de teclas específicas

Quiero saber cuál sería el código para asignar una macro a una tecla, por ejemplo que al apretar la tecla F5 se ejecute cierto programa.

2 respuestas

Respuesta
4

Esta sería una forma para la combinación de teclas Control + P

De la ficha programador, presiona el botón Macros, en la ventana que te aparece selecciona la macro que deseas, presiona el botón Opciones; en la ventana que te aparece escribe una letra en el campo "Tecla de método abreviado". Presiona Aceptar y luego Cancelar.

Listo, cada que presiones Control + P se ejecuta la macro

Pero lo que yo quiero es asignar una macro a la tecla F5, no a un CTRL+___

Saludos

Pon lo siguiente en los eventos de Thisworkbook

Private Sub Workbook_Open()
    Application.OnKey "{F5}", "mensaje"
    Application.OnKey "{F6}", "desactivar"
End Sub

Pon lo siguiente en un módulo:

Sub mensaje()
    MsgBox "Ejecutar macro con F5"
End Sub
Sub desactivar()
    MsgBox "La tecla F5 se desactiva para llamar a la macro mensaje"
    Application.OnKey "{F5}", ""
    Application.OnKey "{F6}", ""
End Sub

Instrucciones para poner la macro en los eventos ThisWorkbook

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a ThisWorkbook
  4. Del lado derecho copia la macro

Sigue las Instrucciones para poner la macro en un módulo

  1. Abre tu archivo de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro

Funciona perfectamente al poner la instrucción en el libro y llamar la macro de un módulo, pero si quiero que esa tecla sólo funcione en un Form específico?

intenté poner la instrucción de Applicarion.OnKey en el Private sub UserForm_Activate() y que me llamara un private sub que se encuentra en el mismo formulario pero no me sirve

Si una macro está en ejecución, en este caso un formulario, no puedes ejecutar otra macro con F5, es decir, no puedes tener 2 ejecuciones al mismo tiempo. Puedes hacer una llamada desde el formulario a otra macro, por ejemplo:

Private Sub CommandButton1_Click()
    Call Proceso
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

Lo que yo quiero es que por ejemplo estando en el UserForm1 al apretar la tecla F5 suceda algo, como si F5 fuese un botón en el formulario que al apretarlo ejecuta una acción, mi private sub sería algo como

Private sub F5_click()
'Acción que se va a ejecutar cuando presione la tecla F5
End sub

Todo debe estar dentro de un UserForm por lo mismo son Private sub, no sé si me daré a entender. 

Saludos

Solamente es posible si el cursor está dentro de un textbox

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 116 Then 'Tecla F5
        Call proceso
    End If
End Sub
'
Sub proceso()
    MsgBox "Se ejecuta la macro proceso"
End Sub

Tu petición original: "código para asignar una macro a una tecla" fue contestada y con 2 opciones, este evento de userform correspondería a otra pregunta.

Saludos. Dante Amor

Recuerda valorar la respuesta.

Respuesta
2

En la sección Macros de mi sitio explico los pasos para colocar un atajo de teclado a las macros. Si luego te queda alguna duda escribime para que aclare el tema.

No encontré el tema en tu página web

En la 1er página de la sección Macros, pto 3:

3- Ejecutar un atajo de teclado: En estos casos tendremos ya una rutina como la del punto anterior (b) en un módulo del Editor.
Volvemos a la hoja Excel, y desde la ficha Programador, grupo Código, Macros, seleccionamos la nuestra desde la lista que se nos ofrece. Presionamos el botón 'Avanzadas' e ingresamos una letra, por ejemplo 't' (sin las comillas)

Nota: Si Excel ya tiene asignada esta letra la reemplazará por Ctrl+Mayúsc +t Esto significa que en el momento que necesitemos que la macro se ejecute presionaremos juntas las teclas Ctrl + t (o Ctrl+Mayusc+t)

Entonces, por ej, si tengo en un módulo una macro llamada 'separando', la imagen te muestra el paso a paso:

Sub separando()
'x Elsamatilde
'atajo de teclado: Ctrl s (mayúsc o minúsc)
'para rango que empieza en A1
Range("A1").Select
'instrucciones
End Sub

Entonces, desde tu hoja, presionando Ctrl s o Ctrl S se ejecutará.

La recomendación es que no utilices las letras más habituales, como C (copiar), P (imprimir), etc.

Esta opción es más segura que la de las teclas (F) que pueden cambiar de versión a versión.

Sdos!

Pero lo que yo quiero es asignar una macro a la tecla F5, no a un CTRL+___

Para cualquier otra tecla, debes utilizar el método ONKey.

Imaginemos que tengas una macro en algún módulo llamada 'seleccionaRango'

Sub seleccionaRango()
'x Elsamatilde
'selecciona filas-col utilizadas
ActiveSheet.UsedRange.Select
End Sub

e imaginemos que esta macro la querrás utilizar en todo el libro, por lo tanto lo siguiente lo colocarás en el evento Open del libro (objeto ThisWorkbook):

Private Sub Workbook_Open()
Application.OnKey "{F5}", "seleccionaRango"
End Sub

Si solo querrás utilizarla en alguna hoja la colocarás en el objeto HOJA donde deba ejecutarse, por ej en el evento Activate es decir cuando entras a la hoja ya tendrás esa tecla disponible para ejecutar tu macro:

Private Sub Worksheet_Activate()
Application.OnKey "{F5}", "seleccionaRango"
End Sub

Desde la Ayuda del Editor, con el tema Application.OnKey tendrás la lista completa del nombre de las teclas.

PD) El título de tu consulta hacía pensar también en la posibilidad de un 'conjunto de teclas', de ahí que te envié las que utilizan Ctrl que es una buena opción también.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas