2012-04-12 79 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