帕特里克(Patrick)正在编写宏,他希望宏在达到特定的到期日期后删除。有两种方法可以完成此任务。首先,您可以按照以下方式编写仅在特定日期之前起作用的宏:

Sub MyMacro()



ExpirationDate = #6/1/2013#     If Now() < ExpirationDate Then

'Rest of macro goes here

End if End Sub

这个想法是,如果(在这种情况下)当前日期早于2013年6月1日,则宏的主体将执行。如果是6月1日或更晚,则宏将不会执行。当然,这种方法实际上并没有删除宏。它只是检查宏是否在某个日期之前执行。

要真正摆脱宏代码,您需要采取另一种方法:

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

此代码改编自最初由Chip Pearson编写的宏,该宏可在其站点的以下地址找到:

http://www.cpearson.com/excel/vbe.aspx

若要使宏工作,您需要确保有对Microsoft Visual Basic for Applications Extensibility的引用。 (您可以通过在VB编辑器中选择“工具” |“引用”,然后在可用引用中选择“ Microsoft Visual Basic for Applications Extensibility”来执行此操作。)

该宏在打开工作簿时运行,并且如果日期大于或等于2013年6月1日,则将删除VBProject的每个组件。这意味着宏非常强大,因为它会删除所有内容,而不仅仅是单个过程或模块。

当然,使用此宏需要牢记一些事情。

首先,如果用户选择在打开工作簿时不启用宏,则此代码将永远不会运行,并且宏也不会被删除。

其次,以这种方式删除宏显然会导致对工作簿的更改。这意味着在关闭工作簿时,将询问用户是否要保存所做的更改。如果他们选择不这样做,则删除内容将不会被保存,并且该宏将在下次打开工作簿时再次运行。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3123)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: