我正在更新由其他人撰写的excel应用(当然:)
我发现很多未使用的Sub CommandButtonXX_Click()
潜艇,我并不总是确定按钮是否仍然存在。有没有办法(程序,VBE接口,外部工具)进行一些清理,同时避免删除仍在使用代码?
属性框顶部的列表看起来确实可靠,因为它是上下文敏感的:如果您在选项卡中,它只显示该选项卡的项目。 / p>
答案 0 :(得分:10)
一个有趣的问题!
CommandButtonXX_Click
代码(不包括其他潜在客户),CommandButtonXX_Click
代码与该工作表上的实际按钮相匹配。Msgbox
列出所有删除编写VBA编辑器可能会有问题,所以请事先保存您的工作。我避免早期绑定Pearson使用的扩展性库。
[2012年10月4日:已更新以使用UserForms而不是表格]
SConst vbext_ct_MSForm = 3
Sub ListProcedures()
Dim VBProj
Dim VBComp
Dim CodeMod
Dim LineNum As Long
Dim NumLines As Long
Dim ProcName As String
Dim ObjButton
Dim ProcKind
Dim strBadButtons As String
Set VBProj = ActiveWorkbook.VBProject
For Each VBComp In VBProj.vbcomponents
If VBComp.Type = vbext_ct_MSForm Then
Set CodeMod = VBComp.CodeModule
With CodeMod
LineNum = .CountOfDeclarationLines + 1
Do Until LineNum >= .CountOfLines
ProcName = .ProcOfLine(LineNum, 0)
If ProcName Like "CommandButton*_Click" Then
Set ObjButton = Nothing
On Error Resume Next
Set ObjButton = VBComp.Designer.Controls(Replace(ProcName, "_Click", vbNullString))
On Error GoTo 0
If ObjButton Is Nothing Then
strBadButtons = strBadButtons & CodeMod.Name & "-" & Replace(ProcName, "_Click", vbNullString) & vbNewLine
.DeleteLines .ProcStartLine(ProcName, 0), .ProcCountLines(ProcName, 0)
End If
End If
LineNum = LineNum + 1
Loop
End With
End If
Next
If Len(strBadButtons) > 0 Then MsgBox "Bad Buttons deleted" & vbNewLine & strBadButtons
End Sub
答案 1 :(得分:6)
有一个名为MZ-Tools的免费加载项工具,可用于识别未使用的过程(它还可以执行更多操作)。这是链接:http://www.mztools.com/v3/download.aspx
答案 2 :(得分:4)
我正在开发 Rubberduck ,这是一个用C#编写的VBE的开源COM插件,具有代码检查功能,从版本1.3(下一版本!)开始,将包括一个完全符合的检查:
此检查并非专门寻找未使用的点击处理程序,因为已接受的答案正在进行(如果任何CommandButtonX
重命名为有意义的任何内容,则接受的答案将不会找到他们 - 但这不是原帖的内容) - 它正在寻找永远不会被称为的程序,假设{{1}标准模块中的过程和函数(即作为"宏"或者#34;用户定义的函数")暴露给主机应用程序,在VBA代码之外使用。
此版本仅查找表单上的控件,而不是工作表上的控件 - 因此位于工作表上的ActiveX控件的处理程序实际上会显示为误报。