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 = #6/1/2013#     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 junio de 2013, se ejecutará el cuerpo principal de la macro. Si es el 1 de junio 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 >= #6/1/2013# 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 junio de 2013, se elimina cada componente 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 (3123) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:

enlace: / excelribbon-Self-Deleting_Macros [Macros que se eliminan automáticamente].