Cómo eliminar una misma macro de todas las hojas de un libro

Tengo una macro que tuve que colocar en cada hoja, pero como no me permite usar la función de "deshacer" la quiero quitar.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Range("A1") = Date & " " & Time
Application.EnableEvents = True

El tema es que el archivo ya tiene más de 200 hojas con esta macro incorporada. Necesito saber cómo puedo eliminarla de cada una de ellas sin hacerlo de a una por una.

2 respuestas

Respuesta
1

Si no tienes otras macros en tu libro, puedes guardar el archivo como "Libro de Excel" y presiona Sí cuanto te aparezca el mensaje: "Para seguir guardando el archivo como libro sin macros, haga clic en Sí".

Eso guardará un nuevo archivo sin las macros en las hojas. En caso de tener más macros, podrías solamente copiar o arrastrar los módulos del archivo anterior en el nuevo archivo.

Avísame cualquier duda.

Muchas gracias! Pero lamentablemente, no sólo SI tengo otras macros, sino que no son módulos. Están en cada hoja.  Además también tengo módulos.

Crees que podría eliminar sólo esa macro de todas las hojas? Gracias!

Ejecuta la siguiente macro

Sub borrar_eventos()
'Por Dante Amor
    For Each h In Sheets
        With ThisWorkbook.VBProject.VBComponents(h.Name).CodeModule
            ini = .ProcStartLine("Worksheet_Change", vbext_pk_Proc)
            fin = .ProcCountLines("Worksheet_Change", vbext_pk_Proc)
            .DeleteLines ini, fin
        End With
    Next
End Sub

.

.

Si en algunas hojas no existe el evento Change envié un error. Actualicé la macro para que no ocurra ese problema:

Utiliza la siguiente:

Sub borrar_eventos()
'Por Dante Amor
    On Error Resume Next
    For Each h In Sheets
        ini = 0
        fin = 0
        With ThisWorkbook.VBProject.VBComponents(h.Name).CodeModule
            ini = .ProcStartLine("Worksheet_Change", vbext_pk_Proc)
            fin = .ProcCountLines("Worksheet_Change", vbext_pk_Proc)
            If ini > 0 Then
                .DeleteLines ini, fin
            End If
        End With
    Next
End Sub

.

.

Pon la macro en un módulo dentro de tu libro y ejecuta la macro; y borrará solamente el evento Change de todas las hojas

Sub borrar_eventos()
'Por Dante Amor
    On Error Resume Next
    For Each h In Sheets
        ini = 0
        fin = 0
        With ThisWorkbook.VBProject.VBComponents(h.Name).CodeModule
            ini = .ProcStartLine("Worksheet_Change", vbext_pk_Proc)
            fin = .ProcCountLines("Worksheet_Change", vbext_pk_Proc)
            If ini > 0 Then
                .DeleteLines ini, fin
            End If
        End With
    Next
End Sub

Al final de la ejecución de la macro, revisa el código de cada hoja y verás que solamente fue removido el evento change.

Respuesta

Hol.a

Lo más práctico y fácil es que uses "Guardar Como" y en "Tipo" pones "*.xlsx", el archivo guardado perderá todas las macros.

Abraham Valencia

Gracias! Te trascribo mensaje como a Dante: "Lamentablemente, no sólo SI tengo otras macros, sino que no son módulos. Están en cada hoja.  Además también tengo módulos.

Crees que podría eliminar sólo esa macro de todas las hojas? Gracias!"

Pero ¿solo existe ese evento en cada módulo de cada hoja o hay más cosas?

Abraham Valencia

Si tengo más eventos!

¿Probaste la propuesta de Dante?

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas