2012-04-12 53 views
15

我刚刚开始了一个新公司的工作,以前的开发人员已经创建了许多自动化任务。当然,几乎没有文档,我没有机会与之前的开发人员合作,所以现在我试图筛选所有这些进程,寻找修改某些特定文件的进程。如何通过VBA代码文件进行搜索

我已经脚本化了SQL中的所有存储过程并使用了搜索工具,但没有找到我正在寻找的东西,所以现在我想知道如果我需要的过程位于许多Access数据库之一用过的。使用SQL Server,编写一个C#应用程序来编写特殊代码很容易,因此我可以通过它们进行搜索,但是使用Access时,它看起来像我仅限于单独打开每个数据库来搜索代码文件。

有没有什么办法可以通过编程方式搜索VBA代码文件?

+2

没有,如果它在接取相同的,但这里的想法就是我会做这在Excel中:http://www.cpearson.com/Excel/vbe.aspx – 2012-04-12 15:13:09

+2

来看看这CodeProject上项目点子 - http://www.codeproject.com/Articles/18029/SourceTools-xla。查看保存项目功能以及它们如何解析vba项目中的所有源文件。 – ja72 2012-04-12 19:12:56

+0

@ ja72如果这个add-inn可以用于Access,或者我可以修改它,那么如果我们见面,我会给你一个双喜。 – 2012-04-12 19:35:30

回答

13

如果您的兴趣是在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方法访问帮助主题开始;你可能更喜欢不同的选择,而不是我用过

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

+0

我假设我也可以使用VBE对象模型来简单地读取每个模块的每一行并将它们写出到一个文本文件,对吧?这将是理想的,所以我可以使用我以前使用的文本搜索工具,而不是尝试创建自己的文本搜索工具。 – 2012-04-12 19:29:35

+0

是的,那是可能的。但是您可以使用Application.SaveAsText将每个模块保存为一个文本文件---应该需要较少的编码工作。 – HansUp 2012-04-13 01:07:06

+0

+1很好地完成。 – brettdj 2012-04-13 03:55:29

5

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

Start Find Find Results

编辑

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

+3

MZ工具是一个伟大的加载项,我用VB6开发时一直使用它,但HansUp是正确的是我正在寻找一种不需要我打开单个文件的解决方案。 – 2012-04-12 19:27:03

3

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

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

Right Click "Print" Check Box "Code"

在一个侧面说明 - 独立的模块,SQL,表格等,都可以进行打印,从“数据库文档”,“分析”组中的“数据库工具“ 标签。

对查询进行排序和概述基础SQL非常有用。

Database Documenter