4

我正在使用具有前端和大量 VBA 代码的旧 Access 数据库。

目标是用购买的产品或 Web 应用程序(一天)替换该工具,当我在进行错误/财政年度修复时,如果可以的话,我想做一些清理工作。

是否可以确定应用程序是否使用了子例程和函数(以便我可以删除不再使用的那些)?

我知道我可以导出模块和类对象,但我没有看到轻松检查实际表单的选项。

我是否必须抛出 Debug.Print 或断点然后只是反弹,或单独搜索表单,还是有更好的方法?

4

4 回答 4

1

以下将搜索所有查询(包括 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
于 2013-06-18T08:37:58.193 回答
1

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 添加了许多生产力功能。

[没有隶属关系。]

于 2013-06-18T02:45:59.037 回答
0

好的,这个答案需要一些工作和编程。我只有你需要的代码的开头,所以你必须做一些研究,以及一些试验和错误。

当您在 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
于 2013-06-18T02:35:34.630 回答
0

使用内置的 Documenter 工具。这比打开 VBE 编辑器要容易(至少如果您是新手)。并且比使用 MZ-Tools 更容易,尽管它是一个了不起的工具。

有关详细信息,请参阅此帖子

于 2013-06-18T03:20:24.640 回答