Excel表格:识别未使用的代码

我正在更新由别人写的Excel应用程序(当然:)

我发现了很多未使用的Sub CommandButtonXX_Click() subs,我并不总是确定button是否仍然存在。 有没有一种方法(程序,VBE接口,外部工具)来做一些清理,同时避免删除仍在使用的代码?

属性框顶部的列表似乎是可靠的,因为它是上下文敏感的 :如果你在一个选项卡中,它只显示该选项卡的项目。

一个有趣的问题!

  1. 我已经大大地修改了Pearson的代码列出了模块中的所有过程,以查找每个工作表上的所有CommandButtonXX_Click代码(不包括其他潜艇),
  2. 然后尝试将每个CommandButtonXX_Click代码与该表上的实际button进行匹配。
  3. 如果没有匹配,该button被删除,最后的Msgbox列出所有的删除

编码VBA编辑器可能会有问题,所以请事先保存您的工作。 我避免了早期与Pearson使用的扩展性库绑定。

[2012年10月4日:更新为在用户窗体而不是表格上工作]

  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 

有一个名为MZ-Tools的免费插件工具,可以用来识别未使用的程序(它也可以做很多)。 这里是链接: http : //www.mztools.com/v3/download.aspx

我正在开发Rubberduck ,一个用C#编写的VBE的开源COM插件,它具有代码检查function,从版本1.3(下一版本)开始,将包含一个检查,确切地说:

“过程”CommandButton5_Click“从不使用”

这个检查并不是专门寻找未使用的点击处理程序,因为接受的答案是(如果任何CommandButtonX被重命名为任何有意义的,那么接受的答案将不会find他们 – 但这不是原来的职位是什么 ) – 它看起来对于从未被调用的过程,假定在标准模块中的Public过程和函数(即暴露给宿主应用程序作为“macros”或“用户定义函数”)在VBA代码之外使用。

此版本仅在表单上find控件,而不是在工作表上 – 所以位于工作表上的ActiveX控件的处理程序实际上会显示为误报。