Necesito saber como ejecutar una macro en excel si es que se cambian datos en unas celdas y a la vez se realice cambio de hoja

Tengo una hoja en excel que tiene una macro que ordena una base de datos, quisiera ver la forma de ejecutar dicha macro siempre y cuando se hallan realizado cambios en un rango de celdas y a la vez se cambie de hoja (o se salga de dicha hoja).

1 Respuesta

Respuesta

Hol.a

Usando el evento "Change" y el evento "Deactivate" de tu hoja podrías:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:A20")) Is Nothing Then
    Call tu_macro
End If
End Sub
Private Sub Worksheet_Deactivate()
Call tu_macro
End Sub

Solo debes reemplazar por tu rango y por el nombre de tu macro

Abraham Valencia

PD: Dicha macro que mencionas debe hacer referencia a la hoja en donde ordena, no solo a los rangos y/o a la hoja activa

¡Gracias! 

Intentare realizar tu consejo, cualquier duda te vuelvo a escribir.

Hola Abraham, ya antes había realizado lo que me recomendaste, pero creo que no me he sabido explicar lo que yo quiero conseguir es esto:

1) En una determinada hoja(llamemosla hoja5) tengo una macro que ordena una pequeña base de datos.

2) Quiero que se la macro(macro1) solo si se cambio datos en las celdas A1:A10, se ejecute al salir de la hoja5.

3) No quiero que se ejecute(la macro 1) al instante, solo si y solo SI cuando haya salido de la hoja5, y también solo si se realizo cambios en el rango ya comentado.

4) Solo si se realizo cambios en A1:A10, se debe ejecutar la macro1 al salir de la hoja5, si no se realizó ningún cambio, la macro1 no se debe ejecutar al salir de la hoja5.

espero me puedas ayudar con este problema en excel, muchas gracias por tu gentil ayuda.

Aja, quedó más claro. Prueba así:

Dim Cambios As Boolean
Private Sub Worksheet_Activate()
Cambios = False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:10")) Is Nothing Then
    Cambios = True
End If
End Sub
Private Sub Worksheet_Deactivate()
If Cambios = True Then
    Call tu_Macro
End If
End Sub

Ojo con la declaración de la variable "Cambios", debe estar en la parte superior del módulo de la hoja, no debe haber nada líneas arriba de ella (con la excepción de "Option Explicit" si es que lo usas).

Comentas

Abraham Valencia

Muchas gracias Abraham me fuiste de mucha ayuda, sin querer abusar me gustaría que me des otro consejo u ayuda ahí va:

1) en A1:A5 tengo nombres y en B1:B5 artículos, en D1:D5 datos.

2) Estando ubicado en H1: al ingresar un nombre(que esta en A1:A5), quisiera que se borren los contenidos, por ejemplo en A2 esta CARLOS, al ingresar CARLOS(en H1), deberá borrarse el contenido de las celdas B2 y D2, sin tocar C2.

3) Quisiera tu ayuda en la forma como lograr ese objetivo en dos formas: a) usando formulas b) usando una macro.

Mil Gracias Abraham por todo tu apoyo.

Sugiero que abras un nuevo mensaje para tu nuevo tema y cerrar este.

Salu2

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas