No me queda claro qué estás intentando hacer, pero te comento que podes programar la activación (y desactivación) de las hojas. Imaginemos que quieras, que cuando se 'entre' a la Hoja2 se ejecute cierta rutina. Entonces en el Editor, seleccioná con doble clic el objeto HOJA2 del panel a tu izquierda y allí escribí esto: Private Sub Worksheet_Activate() 'rutina para cuando se 'entre' a la hoja Call mi_Rutina End Sub Private Sub Worksheet_Deactivate() 'rutina para cuando se salga de la hoja Call otra_rutina End Sub Ahora en un módulo deberás colocar tus rutinas Sub mi_Rutina() 'instrucciones MsgBox "Hola. Estás en la Hoja 2" End Sub Sub otra_rutina() 'instrucciones End Sub
Gracias Elsa por tu respuesta, pero no se amolta a lo que necesito. Siento haber explicado mal mi problema. Tengo un libro con varias hojas en las que inserto diariamente datos, al final de introducir los datos debo pulsar un botón que registra esa hoja a modo de control. El problema es que hay veces que cambio de hoja y no grabado los cambios, por eso había pensado que la forma de no olvidarme es crear una orden VB de forma que cuando cambie de hoja se graben los datos. Muchas gracias
Los únicos eventos para esto son Activate y Desactivate como te mencioné. Podrías utilizar este ejemplo en el evento Deactivate de un objeto HOJA (como te mencioné anteriormente) Private Sub Worksheet_Deactivate() Call macro_salida End Sub O seleccionando el objeto ThisWorkbook, para que se ejecute saliendo de cualquier hoja. Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Call macro_salida End Sub Ahora en un módulo podés tener una rutina de control antes de grabar: Sub macro_salida() sino = MsgBox("Acabas de salir de la hoja 'Consulta'. ¿Necesitas GRABAR los datos?", vbQuestion + vbYesNo, "Atención") If sino = vbYes Then Call macro_graba End Sub Sub macro_graba() 'aquí irá tu macro de grabación 'tené presente que ahora la hoja activa es la nueva, a la que entraste. End Sub ES todo lo que puedo sugerirte, espero te sirva