Macros de eliminación automática (Microsoft Excel)
Patrick está escribiendo una macro y quiere que la macro se borre sola después de que se alcance una fecha de vencimiento específica. Hay un par de formas de abordar esta tarea. Primero, podría escribir una macro que solo funcionaría antes de una fecha específica, de la siguiente manera:
Sub MyMacro() ExpirationDate = #1/1/2020# If Now() < ExpirationDate Then 'Rest of macro goes here End if End Sub
La idea es que si (en este caso) la fecha actual es anterior al 1 de enero de 2020, se ejecutará el cuerpo principal de la macro. Si es el 1 de enero o más tarde, la macro no se ejecutará. Este enfoque, por supuesto, no elimina realmente la macro; simplemente verifica que la macro se esté ejecutando antes de una fecha determinada.
Para deshacerse del código macro, debe adoptar un enfoque diferente:
Private Sub Workbook_Open() Dim VBComp As VBIDE.VBComponent Dim VBComps As VBIDE.VBComponents 'Delete if Past Date If Date >= #1/1/2020# Then Set VBComps = ActiveWorkbook.VBProject.VBComponents For Each VBComp In VBComps Select Case VBComp.Type Case vbext_ct_StdModule, vbext_ct_MSForm, _ vbext_ct_ClassModule VBComps.Remove VBComp Case Else With VBComp.CodeModule .DeleteLines 1, .CountOfLines End With End Select Next VBComp End If Set VBComps = Nothing Set VBComp = Nothing End Sub
Este código fue adaptado de una macro escrita originalmente por Chip Pearson, disponible en su sitio en la siguiente dirección:
http://www.cpearson.com/excel/vbe.aspx
Para que la macro funcione, deberá asegurarse de que haya una referencia a Microsoft Visual Basic para Extensibilidad de Aplicaciones. (Para hacerlo, elija, en el Editor de VB, Herramientas | Referencias y luego elija Microsoft Visual Basic para Extensibilidad de aplicaciones en las referencias disponibles).
La macro se ejecuta cuando se abre el libro de trabajo y, si la fecha es mayor o igual que el 1 de enero de 2020, se eliminan todos los componentes del VBProject. Esto significa que la macro es muy poderosa, porque borra todo, no solo un procedimiento o módulo.
Hay un par de cosas a tener en cuenta con esta macro, por supuesto.
Primero, si el usuario elige no habilitar las macros cuando se abre el libro de trabajo, este código nunca se ejecutará y la macro no se eliminará.
En segundo lugar, eliminar macros de esta manera obviamente introduce cambios en el libro de trabajo. Eso significa que cuando se cierra el libro de trabajo, se le preguntará al usuario si desea guardar sus cambios. Si deciden no hacerlo, las eliminaciones no se guardarán y la macro se ejecutará nuevamente la próxima vez que se abra el libro.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (12812) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:
enlace: / excel-Self-Deleting_Macros [Macros auto-eliminables]
.