Hacer que se ejecute la misma macro hojas distinta

Tengo un proyecto que hace que en una de las hojas, si se modifica la celda a1, se ejecute una macro, y me gustaría que si se modificase esa misma celda de cualquiera de las otras hojas, se ejecutase la misma macro.
El código que tengo en esa hoja que cambia es:
Private Sub Worksheet_Change(ByVal Target As Range)
datos1 = "a1"
If Not Application.Intersect(Target, Range(datos1)) Is Nothing Then
    Call macro
End If
End Sub
¿Hay alguna manera para no tener que copiar el código en todas las hojas?
¿Cómo quiera que es posible que en la ejecución de la aplicación, se inserten hojas, es posible que a las hojas añadidas se les aplique el código de forma automática?

1 respuesta

Respuesta
1
Si, eso es posible, debes poner el macro en el evento Workbook_SheetChange
si te fijas en el editor de Visual basic ( para abrirlo alt+F11), encontraras todas las hojas de tus libro... pero al final existe uno con un icono diferente que dice ThisWokbook
bueno ese icono representa el "Libro" completo y no las hojas por separado, pues entonces todo lo hagamos en este "lugar2, afectara a todas las hojas.
Entonces una vez que seleccionaste ThisWokbook, pegas este código
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
If Not Application.Intersect(Target, Range("$A$1")) Is Nothing Then
    Call macro
End If
End Sub
Eso quiere decir que cada vez que modifiques algo en cualquier hoja se ejecutara tu macro siempre y cuando el cambio (realizado en forma manual, no por fórmula) haya sido en A1 (no importando en que hoja fue).
Hola.
En primer muchas gracias por tu respuesta. La he probado y funciona perfectamente, aunque me ha surgido un "pequeño" contratiempo, y es que no me interesa que se ejecute la macro cuando se modifique esa celda de alguna de las hojas.
(En algunas sí y en otras no, aunque unas y otras están todas seguidas. A partir de la hoja(i), sí que me interesría)
Hola.
Se me ha ocurrido una posible solución, y es que como las hojas con las que quiero que funcione la macro están de la 8ª en adelante, pues bastaría con saber qué número de hoja es aquella en la que me encuentro, y preguntar si el número de orden es mayor que 8.
Esto no parece difícil, pero no consigo obtener el número de orden de la hoja activa.
Agradecería cualquier ayuda.
Ok. Vamos a ver partimos con :
Tengo un proyecto que hace que en una de las hojas, si se modifica la celda a1, se ejecute una macro, y me gustaría que ""si se modificase esa misma celda de cualquiera de las otras hojas,"""... entonces eso es lo que te envíe.
Respecto a lo otro, :
Estas en lo correcto, debería quedar así:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Index > 8 Then
    If Target.Address <> "$A$1" Then Exit Sub
        If Not Application.Intersect(Target, Range("$A$1")) Is Nothing Then
        Call macro
    End If
End If
End Sub
Bye
Muy Bien:
Ya he encontrado lo que buscaba :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address <> "$J$1" Then Exit Sub
If Not Application.Intersect(Target, Range("$J$1")) Is Nothing Then
    If ActiveSheet.Index > 8 Then
    Call macro
    End If
End If
End Sub
Muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas