从Excel文件中删除所有VBA模块?

10

是否可以使用VBA从Excel文件中删除所有VBA模块?

如果存在模块,则在运行此脚本之前未知其名称。

2个回答

14

显然,你可以。下面的代码可以完成任务:

Sub compact_code()

On Error Resume Next
    Dim Element As Object
    For Each Element In ActiveWorkbook.VBProject.VBComponents
        ActiveWorkbook.VBProject.VBComponents.Remove Element
    Next

End Sub

这将删除所有模块,包括ClassModules和UserForms,但保留所有对象模块(工作表、工作簿)。


1
有趣的是,在这种情况下,循环时并不需要从后往前迭代,而通常在运行任何删除过程时都需要。所有模块、用户窗体和类模块都将被删除。 - Kazimierz Jawor
1
我会将对 ActiveWorkbook 的引用更改为 ThisWorkbook,或者如果我要更改另一个工作簿的代码,则使用特定的工作簿引用。 - pablete
@pablete 注意,当你在模板中使用这个时要小心:ThisWorkbook将会指向模板本身,而不是项目本身。有时候这可能会很棘手。 - Mafii

1
这里有一个类似的替代方案,只会移除ClassModules:
On Error Resume Next
With wbk.VBProject
    For x = .VBComponents.Count To 1 Step -1
        If .VBComponents(x).Type = vbext_ct_StdModule Then
            .VBComponents.Remove .VBComponents(x)
        End If
    Next x
End With
On Error GoTo 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接