如何通过macros清除工作表的VBA代码?

我有一个文件,其中有一个模板表,当它激活时需要运行一些代码。 此工作表正在被复制以创build不需要运行此代码的工作表。 目前,我有代码在运行时检查工作表的代号,以便在额外工作表上不做任何事情,但是当您在工作表之间切换时,它仍然会降低使用率。

有没有什么办法可以使重复的macros也清除他们的VBA代码内容?

(编辑)请注意,我需要清除的代码不在模块中。 经过一番研究,似乎我find了一种方法来删除模块(通过访问VBProject.VBComponents ),但我不知道如何访问工作表的VBA 代码

要删除所有工作Sheet模块中的完整代码,您可以尝试如下所示:

 Sub Remove_some_vba_code() Dim activeIDE As Object 'VBProject Set activeIDE = ActiveWorkbook.VBProject Dim Element As VBComponent Dim LineCount As Integer For Each Element In activeIDE.VBComponents If Left(Element.Name, 5) = "Sheet" Then 'change name if necessary LineCount = Element.CodeModule.CountOfLines Element.CodeModule.DeleteLines 1, LineCount End If Next End Sub 

你可以采取的另一种方法是保持你的代码不在工作表中。 那么你不必删除任何东西。 工作表的代码模块是编写事件的便利场所,但是您也可以创build自己的类模块来处理事件。 把它放在一个标准模块中:

 Public gclsEvent As CEvent Sub Auto_Open() Set gclsEvent = New CEvent Set gclsEvent.This = Sheet1 End Sub 

这将创build一个全局的CEvent实例,所以只要您的工作簿是开放的,它就不会丢失范围。 它将代码为Sheet1的工作表分配给该类的该属性。 用这段代码创build一个名为CEvent的类模块

 Private WithEvents mwsThis As Worksheet Public Property Set This(ByVal wsThis As Worksheet): Set mwsThis = wsThis: End Property Public Property Get This() As Worksheet: Set This = mwsThis: End Property Private Sub mwsThis_Activate() Me.This.Copy , Me.This.Parent.Sheets(Me.This.Parent.Sheets.Count) End Sub 

WithEvents关键字暴露该对象的事件。 由于我们只是连接Sheet1的事件,所以激活另一个表单将不会触发代码。