Eliminar macros de un archivo de Excel. ¡Úsese con cuidado!
Este ejemplo es de los catálogados como “está usted seguro?” por el tipo de código que contiene y las posibles macros que elimine.
Por qué querría borrar macros de un archivo de Excel
El código que comparto, sí, elimina todo el código de nuestros objetos y módulos de VBA, pero también nos ilustra sobre los elementos que contiene un proyecto VBA y sus componentes, obviamente manipulados mediante el mismo lenguaje.
Cómo funciona
El ejemplo hace uso de los objetos que contiene otro archivo, en este caso llamado Libro2.xlsx, que para efecto de pruebas lo tuve que crear y abrir el mismo tiempo.
Figura 1. Ingresamos el nombre del archivo en una celda de Excel.
Pero también podemos mandar llamar la ruta completa el archivo, o mejor aún, adecuar el código con un formulario personalizado para buscarlo desde el explorador de Windows.
Puedes revisar el sienguiente ejemplo de uso de un formulario para mostrar ruta completa de un archivo Mostrar archivos PDF en Formulario de Excel vba.
La macro detecta los objetos y módulos del proyecto VBA y define si hay líneas de código a eliminar. Si encuentra líneas de código pregunta sobre si deseas eliminarlas o no. Al final muestra un resumen de los objetos afectados y las líeneas de código eliminadas.
Figura 2. Un mensaje nos pregunta sobre si deseamos eliminar las líneas de código.
Figura 3. Un mensaje al final nos da un resumen de lo eliminado.
Código vba
El botón que se encuentra en la Hoja de Excel manda llamar al siguiente procedimiento.
Option Explicit ' Sub EXCELeINFOBorrarMacros() ' 'Se declaran variables ' Dim strTitulo As String Dim strNombre As String Dim strResp As String Dim intModulosAfectados As Integer Dim intLineasEliminadas As Integer Dim intLineasEliminadas1 As Integer Dim intNumLineas As String Dim strNombreArchivo As String Dim vbModulo As VBComponent ' 'Se inicializan variables strTitulo = "EXCELeINFO" strNombreArchivo = Sheets("Hoja1").Range("rngNombreArchivo").Value intModulosAfectados = 0 intLineasEliminadas = 0 ' On Error GoTo Errores ' 'Se recorren todos los módulos y objetos del archivo ' For Each vbModulo In Workbooks(strNombreArchivo).VBProject.VBComponents strNombre = vbModulo.Name intNumLineas = vbModulo.CodeModule.CountOfLines If intNumLineas > 0 Then strResp = MsgBox("Está seguro de eliminar todo el código del objeto " & vbModulo.Name & _ " con " & intNumLineas & " líneas.", vbYesNo + vbQuestion, strTitulo) If strResp = vbYes Then intLineasEliminadas = vbModulo.CodeModule.CountOfLines vbModulo.CodeModule.DeleteLines 1, vbModulo.CodeModule.CountOfLines intModulosAfectados = intModulosAfectados + 1 intLineasEliminadas1 = intLineasEliminadas + intLineasEliminadas1 Else End If Else End If Next vbModulo ' 'Se muestra el resultado de los objetos afectados y líneas eliminadas ' MsgBox "Se han afectado " & intModulosAfectados & " objeto(s) y se han eliminado " _ & intLineasEliminadas1 & " línea(s) de código.", vbInformation, strTitulo Exit Sub ' 'En caso de error de muestra el mensaje ' Errores: MsgBox "Ha ocurrido un error: Procura que el archivo exista o esté abierto. " & _ strNombre & " no existe. " & Err.Description, vbExclamation, strTitulo End Sub
Anexos
:: Descargar el ejemplo Borrar macros de otro archivo de Excel.zip