首页 文章

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

提问于
浏览
3

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

是否有任何方法可以使重复的宏也清除他们的VBA代码内容?

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

2 回答

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

相关问题