如何搜索VBA代码文件

Bra*_*ore 15 ms-access vba access-vba

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

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

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

Han*_*sUp 13

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

For Each objComponent In Application.VBE.VBProjects(ProjName).VBComponents
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢按编号而不是名称来引用项目,请注意编号从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
Run Code Online (Sandbox Code Playgroud)

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

如果要定位多个db文件并搜索每个文件中的模块,可以使用该OpenDatabase方法自动执行此操作.我会把那部分的细节留给你.


tah*_*wos 6

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

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

右键点击“打印” 复选框“代码”

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

对于访问查询的排序和概述基础SQL很有用。

数据库记录器


ja7*_*a72 5

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

开始查找 查找结果

编辑

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

  • MZ-Tools是一个很棒的插件,我在VB6开发时一直使用它,但HansUp是正确的,我正在寻找一个不需要我打开单个文件的解决方案. (3认同)