Cómo usar los eventos de tiempo y los eventos de pulsación de teclas en Excel 2016 VBA

  1. Software
  2. Oficina de Microsoft
  3. Excel
  4. Cómo usar los eventos de tiempo y los eventos de pulsación de teclas en Excel 2016 VBA

Libro Relacionado

Programación de Excel VBA para Dummies, 4ª Edición

Por John Walkenbach

Hay dos tipos de eventos que puede utilizar en la programación de VBA para Excel 2016 que no están asociados con objetos: tiempo y pulsaciones de teclas. Debido a que el tiempo y las pulsaciones de teclas no están asociadas a un objeto en particular, como un libro de trabajo o una hoja de trabajo, estos eventos se programan en un módulo VBA normal.

El evento OnTime

El evento OnTime ocurre cuando ocurre una hora particular del día. El siguiente ejemplo demuestra cómo conseguir que Excel ejecute un procedimiento cuando ocurre el evento de las 3 p.m. En este caso, una voz de robot le dice que se despierte, acompañada de un cuadro de mensajes:

Sub SetAlarm() Application.OnTime 0.625, "DisplayAlarm"End SubSub DisplayAlarm() Application.Speech.Speech.Speak ("Hey, wake up") MsgBox " ¡Es hora de su descanso de la tarde!

En este ejemplo, se utiliza el método OnTime del objeto Aplicación. Este método toma dos argumentos: la hora (0.625 o 3:00 p.m.) y el nombre del procedimiento Sub a ejecutar cuando se produce el hecho temporal (DisplayAlarm).

Este procedimiento es muy útil si usted tiende a involucrarse tanto en su trabajo que se olvida de las reuniones y citas. Sólo tienes que configurar un evento OnTime para recordártelo.

A la mayoría de la gente le resulta difícil pensar en el tiempo en términos del sistema de numeración de Excel. Por lo tanto, es posible que desee utilizar la función VBA TimeValue para representar la hora. TimeValue convierte una cadena que parece un tiempo en un valor que Excel puede manejar. La siguiente declaración muestra una manera más fácil de programar un evento para las 3 p.m.:

"3:00:00:00 pm"), "DisplayAlarm".

Si desea programar un evento relativo a la hora actual (por ejemplo, dentro de 20 minutos), puede utilizar una expresión como ésta:

Aplicación: OnTime Now + TimeValue ("00:20:00"), "DisplayAlarm".

También puede utilizar el método OnTime para ejecutar un procedimiento VBA en un día determinado. Debe asegurarse de que su ordenador siga funcionando y de que el libro de trabajo con el procedimiento se mantenga abierto. La siguiente declaración ejecuta el procedimiento DisplayAlarm a las 5 p.m. del 31 de diciembre de 2016:

Valor de fecha de la aplicación OnTime ("12/31/2016 5:00 pm"), "DisplayAlarm".

Esta línea de código en particular podría ser útil para advertirte que tienes que ir a casa y prepararte para las festividades de Año Nuevo.

He aquí otro ejemplo que utiliza el evento OnTime. Ejecutando los procedimientos de UpdateClock se escribe la hora en la celda A1 y también se programa otro evento cinco segundos después. Este evento vuelve a ejecutar el procedimiento UpdateClock. El efecto neto es que la celda A1 se actualiza con el tiempo actual cada cinco segundos. Para detener los eventos, ejecute el procedimiento StopClock (que cancela el evento). Tenga en cuenta que NextTick es una variable de nivel de módulo que almacena la hora del siguiente evento.

Dim NextTick As DateSub UpdateClock()' Actualiza la celda A1 con la hora actual ThisWorkbook.Sheets(1).Range("A1") = Time' Configura el siguiente evento dentro de cinco segundos NextTick = Now + TimeValue("00:00:05") Application.OnTime NextTick, "UpdateClock"End SubSub StopClock()' Cancela el evento OnTime (detiene el reloj) On Error Resume Next Application.OnTime NextTick, "UpdateClock", , FalseEnd Sub

El evento OnTime persiste incluso después de cerrar el libro de trabajo. En otras palabras, si cierra el libro de trabajo sin ejecutar el procedimiento StopClock, el libro de trabajo se abrirá por sí mismo en cinco segundos (suponiendo que Excel siga funcionando). Para evitarlo, utilice un procedimiento de evento Libro de trabajo_antesdeCerrar que contenga la siguiente sentencia:

Llamar a StopClock

El método OnTime tiene dos argumentos adicionales. Si planea utilizar este método, debe consultar el sistema de ayuda para obtener todos los detalles.

Si desea ver una aplicación bastante complicada, eche un vistazo a esta aplicación de reloj analógico. La esfera del reloj es en realidad un gráfico, y el gráfico se actualiza cada segundo para mostrar la hora del día. Inútil, pero divertido.

Una aplicación de reloj analógico.

Eventos de pulsación de teclas

Mientras trabaja, Excel supervisa constantemente lo que escribe. Debido a esto, puede configurar las cosas de manera que una pulsación o una combinación de teclas ejecute un procedimiento.

He aquí un ejemplo que reasigna las teclas PgDn y PgUp:

Sub Setup_OnKey() Application.OnKey "{PgDn}", "PgDn_Sub" Application.OnKey "{PgUp}", "PgUp_Sub"End SubSub PgDn_Sub() On Error Resume Next ActiveCell.Offset(1, 0).ActivateEnd SubSub PgUp_Sub() On Error Resume Next ActiveCell.Offset(-1, 0).ActivateEnd SubSub

Después de configurar los eventos OnKey ejecutando el procedimiento Setup_OnKey, pulsando PgDn se desplaza una fila hacia abajo. Presionando PgUp se mueve una fila hacia arriba.

Observe que los códigos de las llaves están encerrados entre llaves, no entre paréntesis. Para obtener una lista completa de los códigos del teclado, consulte el sistema de ayuda. Buscar OnKey.

En este ejemplo, On Error Resume Next se utiliza para ignorar cualquier error que se genere. Por ejemplo, si la celda activa está en la primera fila, el intento de mover una fila hacia arriba causa un error que puede ser ignorado con seguridad. Y si una hoja de gráfico está activa, no hay ninguna celda activa.

Al ejecutar la siguiente rutina, se cancelan los eventos OnKey:

Sub Cancel_OnKey() Application.OnKey "{PgDn}"
 OnKey "{PgUp}"End Sub

Usar una cadena vacía como segundo argumento para el método OnKey no cancela el evento OnKey. Más bien, hace que Excel simplemente ignore la pulsación de teclas. Por ejemplo, la siguiente declaración le dice a Excel que ignore Alt+F4. El signo de porcentaje representa la tecla Alt:

OnKey "%{F4}", ""

Aunque puede utilizar el método OnKey para asignar una tecla de acceso directo para ejecutar una macro, debe utilizar el cuadro de diálogo Opciones de macro para esta tarea.

Si cierra el libro de trabajo que contiene el código y deja Excel abierto, el método OnKey no se restablecerá. Como consecuencia, al presionar la tecla de acceso directo, Excel abrirá automáticamente el archivo con la macro. Para evitar que esto suceda, debe incluir código en su Workbook_BeforeClose event code para restablecer el evento OnKey.

No Responses

Write a response