我刚开始在一家新公司工作,以前的开发人员已经创建了许多自动化任务。当然,几乎没有文档,我没有机会与之前的开发人员合作,所以现在我正在尝试筛选所有这些过程,寻找修改某些特定文件的过程。
我已经编写了SQL中的所有存储过程,并使用了搜索工具但找不到我要查找的内容,所以现在我想知道我需要的进程是否位于使用的许多Access数据库之一。使用SQL Server,编写一个C#应用程序来编写脚本很容易,因此我可以搜索它们,但是使用Access看起来我只能单独打开每个数据库以搜索代码文件。
有没有办法以编程方式搜索VBA代码文件?
答案 0 :(得分: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
方法的Access帮助主题;您可能更喜欢与我使用的不同选项。
如果要定位多个db文件并搜索每个文件中的模块,可以使用OpenDatabase
方法自动执行此操作。我会把那部分的细节留给你。
答案 1 :(得分:5)
答案 2 :(得分:4)