我更新的excel应用别人写的(当然:)的Excel表格:识别未使用的代码
的,我发现很多未使用Sub CommandButtonXX_Click()
的潜艇,我并不总是知道如果按钮仍然存在。有没有一种方法(程序,VBE接口,外部工具)做一些清理,同时避免删除仍在使用代码?
属性框顶部的列表似乎是可靠的,因为它是上下文敏感的:如果您在选项卡中,它只显示该选项卡的项目。
我更新的excel应用别人写的(当然:)的Excel表格:识别未使用的代码
的,我发现很多未使用Sub CommandButtonXX_Click()
的潜艇,我并不总是知道如果按钮仍然存在。有没有一种方法(程序,VBE接口,外部工具)做一些清理,同时避免删除仍在使用代码?
属性框顶部的列表似乎是可靠的,因为它是上下文敏感的:如果您在选项卡中,它只显示该选项卡的项目。
一个有趣的问题!
CommandButtonXX_Click
代码(不包括其他潜艇),CommandButtonXX_Click
代码匹配对片上的实际按钮。Msgbox
末列出所有缺失编码VBA编辑器可能会产生问题,从而请事先保存工作。我避免了早期与Pearson使用的Extensibility库绑定。
[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-工具,可以用来识别未使用的程序无附加工具(它也可以做更多)。这里是链接:http://www.mztools.com/v3/download.aspx
我开发Rubberduck,一个开源的COM加载项为C#编写的VBE具有代码检查的特征是,作为1.3版本(下一个版本! ),将包括正是这么做的检查:
这种检查是不是专门找未使用单击处理作为公认的答案是做(如果有任何CommandButtonX
是重命名d到任何有意义的东西,那么接受的答案将不会找到它们 - 但这不是原来的帖子是关于) - 它正在寻找程序,从来没有被称为,假设Public
过程和标准模块中的功能。在主机应用程序中暴露为“宏”或“用户定义的函数”)在VBA代码之外使用。
此版本只发现于形式,而不是在工作表控制 - 因此对于位于一个工作表将实际显示为误报ActiveX控件处理程序。
不错的问题。我不会试图通过VBA自动化抑制,因为这将是很难编码,你可能会得到未预料到的结果。如果您尝试“手动”,VBE中的列表框应该是穷举剩下的按钮。 – JMax
@JMAx:我真的不想自动删除代码,只是为了确保ButtonXX真的没了,所以我可以手动删除相应的子文件。 –