我正在使用具有前端和大量 VBA 代码的旧 Access 数据库。
目标是用购买的产品或 Web 应用程序(一天)替换该工具,当我在进行错误/财政年度修复时,如果可以的话,我想做一些清理工作。
是否可以确定应用程序是否使用了子例程和函数(以便我可以删除不再使用的那些)?
我知道我可以导出模块和类对象,但我没有看到轻松检查实际表单的选项。
我是否必须抛出 Debug.Print 或断点然后只是反弹,或单独搜索表单,还是有更好的方法?
以下将搜索所有查询(包括 RecordSource 和 Rowsource 中的查询):
Public Sub CheckQueries(ByVal str As String)
Dim qu As QueryDef
For Each qu In CurrentDb.QueryDefs
If InStr(qu.SQL, str) > 0 Then
Debug.Print qu.Name
End If
Next
End Sub
MZTools做到了这一点。
MZ-Tools 3.0 是 Visual Basic 6.0、Visual Basic 5.0 和 Visual Basic For Applications 编辑器的免费插件(由支持 VBA 的应用程序提供,例如 Office 2000-2013 32 位中的应用程序,Office 64 位除外) 为 IDE 添加了许多生产力功能。
[没有隶属关系。]
好的,这个答案需要一些工作和编程。我只有你需要的代码的开头,所以你必须做一些研究,以及一些试验和错误。
当您在 Access 中使用 VBA 编辑器时,它称为 VBE。这包含所有模块表单和报告中的所有代码。debug.print 行是您所追求的。
如果您逐行将其与过程名称和对象名称(表单和报告)一起保存到表中,然后将其保存到表中,则可以进行不匹配查询以查看从未调用过的过程(它们被列为一个过程,但不在任何代码行中。
预计这将花费您几个小时的时间来解决问题。但是一旦你这样做了,你就会有一个很好的工具。
Function GetVBEDeatils2()
Dim vbProj As VBProject
Dim vbComp As VBComponent
Dim vbMod As CodeModule
Dim sProcName As String
Dim pk As vbext_ProcKind
Dim iCounter As Long
Dim ProcLines As Long
For Each vbProj In Application.VBE.VBProjects 'Loop through each project
For Each vbComp In vbProj.VBComponents 'Loop through each module
Set vbMod = vbComp.CodeModule
iCounter = 1
Do While iCounter < vbMod.CountOfLines 'Loop through each procedure
sProcName = vbMod.ProcOfLine(iCounter, pk)
If sProcName <> "" Then
Debug.Print vbMod.Lines(iCounter, vbMod.ProcCountLines(sProcName, pk))
Debug.Print
iCounter = iCounter + vbMod.ProcCountLines(sProcName, pk)
Else
iCounter = iCounter + 1
End If
Loop
Next vbComp
Next vbProj
Set vbMod = Nothing
End Function
使用内置的 Documenter 工具。这比打开 VBE 编辑器要容易(至少如果您是新手)。并且比使用 MZ-Tools 更容易,尽管它是一个了不起的工具。
有关详细信息,请参阅此帖子。