Pregunta

Quiero realizar una acción en una macro del libro de Excel después de un período de inactividad (ocultar / proteger algunas hojas de trabajo). ¿Cuál es la manera mejor / más sencilla de lograr esto?

Estoy asumiendo que usaré Application.OnTime para verificar periódicamente si el usuario ha estado activo. Pero, ¿qué eventos debo manejar para ver si el usuario estaba " activo " (es decir, tiene algo, cualquier cosa, con el libro de trabajo)?

Aclaración: quiero detectar la actividad todo , no solo los cambios. Es decir. incluyendo clics del mouse, selección, copia, navegación con el teclado, cambio de hojas de trabajo, ...

Supongo que cuando ocurra un evento de IU que represente la actividad del usuario, estableceré una variable de este modo:

LastActivityTime = Now

y la macro ejecutada por Application.OnTime comprobará esta variable para ver si el usuario ha estado activo recientemente. ¿Qué eventos (aparte de SheetChange ) necesitaría manejar para establecer esta variable? Esperaba que hubiera eventos KeyUp y MouseUp , estos dos probablemente habrían sido suficientes.

Actualización: He implementado esto manejando Workbook_SheetActivate , Workbook_SheetSelectionChange y Workbook_WindowActivate . De manera realista, esto es probablemente suficiente.

¿Fue útil?

Solución

He implementado esto manejando Workbook_SheetActivate, Workbook_SheetSelectionChange y Workbook_WindowActivate. De manera realista, esto es probablemente suficiente.

Otros consejos

Solo puedo ver dos soluciones: ya sea manejar el evento único que tiene el objeto de la Aplicación o usar Función GetLastInputInfo .

Una forma sencilla es comparar el contenido del libro de trabajo con el de la última vez que verificó. Creo que combinando esto con Application.OnTime resolverá su problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top