Excel表格:识别未使用的代码
我正在更新由别人写的Excel应用程序(当然:)
我发现了很多未使用的Sub CommandButtonXX_Click()
subs,我并不总是确定button是否仍然存在。 有没有一种方法(程序,VBE接口,外部工具)来做一些清理,同时避免删除仍在使用的代码?
属性框顶部的列表似乎是可靠的,因为它是上下文敏感的 :如果你在一个选项卡中,它只显示该选项卡的项目。
一个有趣的问题!
- 我已经大大地修改了Pearson的代码列出了模块中的所有过程,以查找每个工作表上的所有
CommandButtonXX_Click
代码(不包括其他潜艇), - 然后尝试将每个
CommandButtonXX_Click
代码与该表上的实际button进行匹配。 - 如果没有匹配,该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(下一版本)开始,将包含一个检查,确切地说:
这个检查并不是专门寻找未使用的点击处理程序,因为接受的答案是(如果任何CommandButtonX
被重命名为任何有意义的,那么接受的答案将不会find他们 – 但这不是原来的职位是什么 ) – 它看起来对于从未被调用的过程,假定在标准模块中的Public
过程和函数(即暴露给宿主应用程序作为“macros”或“用户定义函数”)在VBA代码之外使用。
此版本仅在表单上find控件,而不是在工作表上 – 所以位于工作表上的ActiveX控件的处理程序实际上会显示为误报。