23 abril, 2021

ELIMINAR UNA MACRO UTILIZANDO OTRA MACRO

Hola a todos:

Hace unos días un lector me enviaba una consulta acerca de cómo podía eliminar una macro utilizando otra macro.

Aunque no suele ser muy habitual este tipo de procedimientos, dado que implica que si nos equivocamos podemos eliminar código o macros por equivocación, la verdad es que me pareció interesante para publicar en la web.

Antes de comenzar con el ejercicio, para que la macro funcione es necesario realizar unas modificaciones en el centro de confianza de nuestro programa de Excel. Para hacerlo, debéis entrar en Archivo > Opciones y pulsar en Centro de Confianza:

ELIMINAR UNA MACRO UTILIZANDO OTRA MACRO

A continuación se mostrará esta otra pantalla:

ELIMINAR UNA MACRO UTILIZANDO OTRA MACRO1

Elegimos la opción Configuración de macros y activamos la casilla que pone: Confiar en el acceso al modelo de objetos de proyectos de VBA, y aceptamos.

Es importante que realicemos este paso, si no lo hacemos la macro que os voy a mostrar generará un error y no se ejecutará.

Ahora veamos dos formas de realizar el borrado de nuestros procesos. Por una parte podemos eliminar el contenido de un módulo entero, aunque tenga varios sub o funciones. Simplemente queremos vaciar de contenido todo el módulo.

Para realizar esto, este es el código que podemos utilizar:

Sub Borrar_módulo()
'Declaramos variables
Dim modulo As String
'Eliminamos todo el contenido del módulo que indiquemos
modulo = "Módulo1"
With ThisWorkbook
.VBProject.VBComponents(modulo).CodeModule.DeleteLines 1, .VBProject.VBComponents(modulo).CodeModule.CountOfLines
End With
End Sub

En este caso estamos eliminando todo el contenido del módulo 1, si quisiéramos borrar el contenido "ThisWorkBook", simplemente lo indicamos en la macro sustituyéndolo en la macro.

Pero también puede que solo deseemos eliminar un procedimiento concreto y no todo. Para eso, utilizaremos el siguiente código:

Sub Borrar_macro()
'Declaramos variables
Dim fin As Long
Dim inicio As Long
Dim modulo As Object
'Indicamos el módulo en el que queremos borrar la macro
Set modulo = ThisWorkbook.VBProject.VBComponents("Módulo1").CodeModule
'Indicamos el nombre del procedimiento o macro a eliminar
With modulo
inicio = .ProcStartLine("Borrar_módulo", vbext_pk_Proc)
fin = .ProcCountLines("Borrar_módulo", vbext_pk_Proc)
.DeleteLines inicio, fin
End With
End Sub

En este caso borraremos solo este código especificando el nombre de la subrutina anterior (Borrar_módulo) y que esté incluida en el módulo 1 de nuestro proyecto de VBA.

Obviamente podremos cambiar los valores en función de nuestra necesidades.

No voy a dejar archivo de ejemplo porque no estoy interactuando con la hoja ni vamos a crear datos, y no creo que sea necesario dado que solo necesitáis el código para y leer el post para poder realizar el ejemplo por vosotros mismos. De todas formas si tenéis dudas, me comentáis.

Por cierto, cuidado con este tipo de programaciones, recordad que estamos borrando código y debéis ser muy cuidadosos a la hora de programar, ¿ok?.

Eso es todo, espero que os haya gustado!. : )

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

10 comentario en “ELIMINAR UNA MACRO UTILIZANDO OTRA MACRO

    1. Hola sustituye vbext_pk_Proc por 0, debería solucionar el problema. Si no es así, debes activar la referencia: Microsoft Visual Basic for Applications Extensibility

  1. Una pregunta como puedo programar una macro para eliminar todas las Macros creadas en personal en una fecha específica? Y además borrar la macro Add que es un archivo que, se usa en el complemento de Excel y que también se elimine en la misma fecha que se le indicará?

  2. Don Segu no entendi su respuesta, lo que necesito es programar una macro para que en un día y hora determinada que yo le indique me elimine todos los códigos VBA (es decir que elimine todos los modulos creados en las macros guadadas en PERSONAL y que además quite el complemento ADD usado en las macros y que además tambien elimine el archivo ADD que está en el escritorio de la Computadora).

    Gracias.

    1. Hola Edgar:

      Te estoy indicando cómo puedes confeccionar la macro:

      Por un lado eliminas los módulos con esto:

      Sub eliminar()
      On Error Resume Next
      Dim Compomente As Object
      For Each Compomente In ActiveWorkbook.VBProject.VBComponents
      ActiveWorkbook.VBProject.VBComponents.Remove Compomente
      Next
      End Sub

      y por otro lado eliminas los AddIn (los deshabilitas). Debería funcionar con un for.

      Dim Complemento As AddIn
      For Each Complemento In Application.AddIns
      Complemento.Installed = False
      Next

      El tema de ejecutarlos a una hora determinada, se puede hacer de dos formas, a través de windows que es como te lo indico en el post y con VBA
      sería así incluyendo este código en thisworkbook

      Private Sub Workbook_Open()
      Application.OnTime TimeValue("8:00:00"), "eliminar"
      End Sub

      Esas serían las instrucciones para hacerlo. Saludos.

  3. Pero don Segu, como le puedo poner que la Macro se me ejecute en un día específico que yo le pueda dar la fecha, es decir, que yo en la macro le declare el día en que debe ejecutar la macro, puede ser que le indique todos los miércoles a las 8:00 am o solamente un dia como por ejemplo el 10/01/2021?.

    1. Hola Edgar:

      La pregunta no está relacionado con el post, de todas formas, para hacer lo que pretendes tienes dos alternativas,

      O lo haces con programación utilizando el método application.wait: https://docs.microsoft.com/es-es/office/vba/api/excel.application.wait y ahí configurarlo según tus necesidades.

      o utilizando windows con el programador de tareas, te dejo un post sobre esto: https://excelsignum.com/2018/02/10/ejecutar-una-macro-con-el-programador-de-tareas-de-windows/

      Te recomiendo la segunda.

      Saludos.

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies