【问题标题】:How to search through VBA code files如何搜索 VBA 代码文件
【发布时间】:2012-04-24 11:21:59
【问题描述】:

我刚开始在一家新公司工作,以前的开发人员在该公司创建了许多自动化任务。当然,几乎没有文档,而且我没有机会与以前的开发人员合作,所以现在我试图筛选所有这些过程,寻找修改某些特定文件的过程。

我已经在 SQL 中编写了所有存储过程的脚本并使用了搜索工具,但没有找到我要查找的内容,所以现在我想知道我需要的进程是否位于使用的许多 Access 数据库之一中.使用 SQL Server,很容易编写 C# 应用程序来编写 procs 脚本,以便我可以搜索它们,但使用 Access,我似乎仅限于单独打开每个 db 来搜索代码文件。

有没有办法以编程方式搜索 VBA 代码文件?

【问题讨论】:

标签: ms-access vba


【解决方案1】:

如果您的兴趣是在 Access 数据库文件中搜索代码模块,您可以使用 VBE 对象模型。此示例在当前数据库的ActiveVBProject 的所有模块中搜索一个单词。如果数据库包含多个 VBProject,您可以枚举 VBProjects 集合并按名称一次搜索一个:

For Each objComponent In Application.VBE.VBProjects(ProjName).VBComponents

或者,如果您更喜欢按编号而不是名称来引用项目,请注意编号以 1 而不是 0 开头。

Public Sub findWordInModules(ByVal pSearchWord As String)
    'Dim objComponent As VBComponent
    ' VBComponent requires reference to Microsoft Visual Basic
    ' for Applications Extensibility; use late binding instead:
    Dim objComponent As Object
    Dim strMessage As String
    Dim strModuleList As String

    strModuleList = vbNullString
    For Each objComponent In Application.VBE.ActiveVBProject.VBComponents
        If objComponent.CodeModule.Find(pSearchWord, 1, 1, -1, -1) = True Then
            strModuleList = strModuleList & "; " & objComponent.Name
        End If
    Next objComponent
    strMessage = "Text '" & pSearchWord & "' found in "
    If Len(strModuleList) > 0 Then
        strMessage = strMessage & "modules: " & Mid(strModuleList, 3)
    Else
        strMessage = strMessage & "no modules"
    End If
    Debug.Print strMessage
End Sub

查看该Find 方法的Access 帮助主题;您可能更喜欢与我使用的不同的选项。

如果您想定位多个数据库文件并搜索每个文件中的模块,您可以使用OpenDatabase 方法自动执行此操作。这部分的细节由你决定。

【讨论】:

  • 我假设我也可以使用 VBE 对象模型来简单地读取每个模块的每一行并将它们写入文本文件,对吗?这将是理想的,因此我可以使用我习惯使用的文本搜索工具,而不是尝试创建自己的。
  • 是的,这是可能的。但是您可以使用 Application.SaveAsText 将每个模块保存为文本文件 --- 这应该需要更少的编码工作。
【解决方案2】:

另一个先前未提及的选项是仅在 VBA 编辑器中从上下文菜单中打印项目代码。可以修改以下步骤以适应可用的应用程序,但结果是相同的 - 可搜索的文本。

在 VBA 编辑器中,右键单击项目名称,然后从出现的上下文菜单中单击打印。确保选中“代码”,然后单击“确定”。可以从最后一个对话框中的“设置...”菜单更改打印机。

附带说明 - 可以从“数据库工具”选项卡的“分析”组中的“数据库文档器”中打印独立模块、SQL、表等。

非常有用,用于对 Access 查询的底层 SQL 进行排序和概述。

【讨论】:

    【解决方案3】:

    最好下载免费的MZ-Tools for VBA 并使用他们的搜索/替换功能。

    编辑

    MZ-Tools for VBA 不再可用。付费版本适用于较新的办公室安装。

    【讨论】:

    • MZ-Tools 是一个很棒的插件,我在做 VB6 开发时一直使用它,但是 HansUp 是正确的,我正在寻找不需要我打开的解决方案单个文件。
    猜你喜欢
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    相关资源
    最近更新 更多