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

时间:2013-03-26 05:31:20

标签: excel vba excel-vba

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

有没有办法让制作重复项的宏也清除他们的VBA代码内容?

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

2 个答案:

答案 0 :(得分:3)

要删除所有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

答案 1 :(得分:2)

您可以采用的另一种方法是将所有代码保留在工作表之外。然后你不必删除任何东西。工作表的代码模块是编写事件代码的便利位置,但您也可以创建自己的类模块来处理事件。把它放在标准模块中:

Public gclsEvent As CEvent

Sub Auto_Open()

    Set gclsEvent = New CEvent
    Set gclsEvent.This = Sheet1

End Sub

这将创建一个全局的CEvent实例,因此只要您的工作簿处于打开状态,它就不会丢失范围。它将代号为Sheet1的工作表分配给该类的This属性。使用此代码

创建名为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的事件,因此激活另一个工作表不会触发代码。