Excel表格:识别未使用的代码
Excel表格:识别未使用的代码
问题的出现原因:
1. 作者修改了Pearson的代码,用于查找每个工作表上的所有CommandButtonXX_Click代码(不包括其他子程序);
2. 作者试图将每个CommandButtonXX_Click代码与该表单上的实际按钮进行匹配;
3. 如果没有匹配项,则删除该按钮,并在最后通过Msgbox列出所有删除的按钮。
问题的解决方法:
1. 使用VBA编辑器编写代码,但它可能会有问题,所以在操作前请保存工作。
2. 避免使用Pearson所使用的Extensibility库进行早期绑定。
以下是用于查找并删除未使用的按钮代码的VBA代码:
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
作者表示正在基于提供的代码进行修改,以查找Form中的按钮。
最终,作者更新了代码以查找用户窗体中的按钮,并成功解决了问题。
Excel 表格:识别未使用的代码
在开发用于 VBE 的开源 COM 加载项 Rubberduck 时,我编写了一个代码检查功能,该功能将在下一个版本(1.3)中包含一个检查项,用于识别未使用的代码:
这个检查项并不是像被接受的答案那样专门寻找未使用的点击处理程序(如果任何 CommandButtonX 被重命名为有意义的名称,那么被接受的答案将无法找到它们——但这不是原始帖子的问题所在)——它是在寻找从 VBA 代码中未调用的过程,假设公共模块中的公共过程和函数(即作为“宏”或“用户定义函数”暴露给宿主应用程序)会在 VBA 代码之外使用。
这个版本只能找到表单上的控件,而不能找到工作表上的控件——因此,位于工作表上的 ActiveX 控件的处理程序实际上会显示为虚警。
对于 Rubberduck,祝你好运——期待见到它的表现。
谢谢!但是在我看来,那个检查项并不是最好、最有影响力和改变生活的即将推出的功能;)(咳嗽)重命名重构(咳嗽)