web-dev-qa-db-ja.com

VBAコードファイルを検索する方法

以前の開発者が多くの自動化されたタスクを作成していた新しい会社で仕事を始めたところです。もちろん、ドキュメントは事実上なく、以前の開発者と仕事をする機会がなかったので、今はこれらすべてのプロセスをふるいにかけて、特定のファイルを変更するプロセスを探しています。

SQLですべてのストアドプロシージャをスクリプト化し、検索ツールを使用しましたが、探しているものが見つかりませんでした。そのため、必要なプロセスが、使用されている多くのAccessデータベースの1つにあるかどうか疑問に思います。 SQL Serverでは、プロシージャをスクリプト化するC#アプリを作成して、プロシージャを検索するのは簡単でしたが、Accessでは、各データベースを個別に開いてコードファイルを検索することに制限されているようです。

VBAコードファイルをプログラムで検索する方法はありますか?

15
Brandon Moore

Accessデータベースファイル内のコードモジュールを検索することに関心がある場合は、VBEオブジェクトモデルを使用できます。このサンプルは、現在のデータベースのActiveVBProjectのすべてのモジュールでWordを検索します。データベースに複数のVBProjectが含まれている場合は、VBProjectsコレクションを列挙し、名前でプロジェクトを1つずつ検索できます。

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

または、名前ではなく番号でプロジェクトを参照する場合は、番号が0ではなく1で始まることに注意してください。

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メソッドを使用してこれを自動化できます。その部分の詳細はあなたにお任せします。

13
HansUp

前述されていない別のオプションは、VBAエディターのコンテキストメニューからプロジェクトコードを印刷することです。以下の手順は、使用可能なアプリケーションに合わせて変更できますが、結果は同じで、検索可能なテキストです。

VBAエディターで、プロジェクト名を右クリックし、表示されるコンテキストメニューから[印刷]をクリックします。 「コード」がチェックされていることを確認し、「OK」をクリックします。プリンタは、最後のダイアログで使用できる[設定...]メニューから変更できます。

Right Click "Print"Check Box "Code"

ちなみに、スタンドアロンモジュール、SQL、テーブルなどは、[データベースツール]タブの[分析]グループの[データベースドキュメンテーション]から印刷できます。

Accessクエリの基礎となるSQLの並べ替えとアウトライン化に非常に役立ちます。

Database Documenter

5
tahwos

VBA用の無料の MZ-Tools をダウンロードして、検索/置換機能を使用することをお勧めします。

Start FindFind Results

編集

MZ-Tools forVBAは使用できなくなりました。有料版は、新しいオフィスのインストールで動作します。

5
ja72