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

21 浏览
0 Comments

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

我正在更新别人编写的一个Excel应用程序(当然是别人写的)。

我发现了很多未使用的Sub CommandButtonXX_Click()子程序,但我并不总是确定该按钮是否仍然存在。有没有一种方法(程序、VBE界面、外部工具),可以清理一些无用的代码,同时避免删除仍在使用的代码?

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

0
0 Comments

Excel表格中出现未使用的代码的原因可能是开发人员在编写代码时添加了一些功能,但后来这些功能并没有被使用到。解决这个问题的方法是使用一个名为MZ-Tools的免费插件工具。该工具可以用来识别未使用的过程,同时也可以做更多其他的事情。安装MZ-Tools后,可以通过点击“File | Make ...”菜单中的某些选项来启动自动进行源代码的审查,进而识别出未使用的过程。

0
0 Comments

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中的按钮。

最终,作者更新了代码以查找用户窗体中的按钮,并成功解决了问题。

0
0 Comments

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

在开发用于 VBE 的开源 COM 加载项 Rubberduck 时,我编写了一个代码检查功能,该功能将在下一个版本(1.3)中包含一个检查项,用于识别未使用的代码:

"Procedure 'CommandButton5_Click' is never used"

这个检查项并不是像被接受的答案那样专门寻找未使用的点击处理程序(如果任何 CommandButtonX 被重命名为有意义的名称,那么被接受的答案将无法找到它们——但这不是原始帖子的问题所在)——它是在寻找从 VBA 代码中未调用的过程,假设公共模块中的公共过程和函数(即作为“宏”或“用户定义函数”暴露给宿主应用程序)会在 VBA 代码之外使用。

这个版本只能找到表单上的控件,而不能找到工作表上的控件——因此,位于工作表上的 ActiveX 控件的处理程序实际上会显示为虚警。

对于 Rubberduck,祝你好运——期待见到它的表现。

谢谢!但是在我看来,那个检查项并不是最好、最有影响力和改变生活的即将推出的功能;)(咳嗽)重命名重构(咳嗽)

0