Gene要求一种从宏内删除宏的方法。他有一个很大的工作表,该工作表使用宏将http://www.formville.com/C17_free-purchase-orders.html[purchase order]组合在一起。

作为最后一步,宏将删除完成的采购订单不再需要的原始数据。然后,该简化的工作簿将以新名称保存。在删除之前,Gene需要宏才能删除存储在SelectionChange事件处理程序中的宏。

有两种方法可以解决此问题。一种方法是避免必须全部删除。而是让宏创建一个新的工作簿,然后将所需数据的副本传输到该工作簿。然后,您可以将数据切片并切成新工作簿中的数据并将其保存为您的采购订单。在此过程中,绝不会将现有工作簿中的宏复制到新工作簿中,因此您不必担心删除它们。

将当前工作簿中的所有工作表复制到新工作簿中非常容易。以下宏显示了如何完成此操作:

Sub CopyThisWorkbook()

Dim CopiedWB As String

CopiedWB = "Copy of " & ActiveWorkbook.Name

Sheets.Copy     ActiveWorkbook.SaveAs Filename:=CopiedWB, _       FileFormat:=xlNormal End Sub

当将Copy方法应用于Sheets集合时,它会将活动工作簿中的所有工作表都复制到新工作簿中并使新工作簿处于活动状态。最后一条命令以新名称保存新工作簿。

当然,如果您需要某些宏位于新工作簿中,但又不是全部(例如SelectionChange事件处理程序),那么最好删除不需要的宏,然后将其保存在新宏中名称。下面的示例宏演示如何从Sheet1的工作表代码中删除SelectionChange事件处理程序。

Sub DeleteProcedure()

Dim VBCodeMod As CodeModule     Dim StartLine As Long     Dim HowManyLines As Long

Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule     With VBCodeMod         StartLine = .ProcStartLine("Worksheet_SelectionChange", _           vbext_pk_Proc)

HowManyLines = .ProcCountLines("Worksheet_SelectionChange", _           vbext_pk_Proc)

.DeleteLines StartLine, HowManyLines     End With End Sub

宏完成后,可以保存工作簿,并且所需的宏将不在保存的文件中。此宏改编自Chip Pearson网站上提供的信息,如果您需要有关此技术的其他信息,则应参考该宏:

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

注意:

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

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

本技巧(3073)适用于Microsoft Excel 97、2000、2002和2003。