我更新的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真的沒了,所以我可以手動刪除相應的子文件。 –