以前の開発者が多くの自動化されたタスクを作成していた新しい会社で仕事を始めたところです。もちろん、ドキュメントは事実上なく、以前の開発者と仕事をする機会がなかったので、今はこれらすべてのプロセスをふるいにかけて、特定のファイルを変更するプロセスを探しています。
SQLですべてのストアドプロシージャをスクリプト化し、検索ツールを使用しましたが、探しているものが見つかりませんでした。そのため、必要なプロセスが、使用されている多くのAccessデータベースの1つにあるかどうか疑問に思います。 SQL Serverでは、プロシージャをスクリプト化するC#アプリを作成して、プロシージャを検索するのは簡単でしたが、Accessでは、各データベースを個別に開いてコードファイルを検索することに制限されているようです。
VBAコードファイルをプログラムで検索する方法はありますか?
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
メソッドを使用してこれを自動化できます。その部分の詳細はあなたにお任せします。
前述されていない別のオプションは、VBAエディターのコンテキストメニューからプロジェクトコードを印刷することです。以下の手順は、使用可能なアプリケーションに合わせて変更できますが、結果は同じで、検索可能なテキストです。
VBAエディターで、プロジェクト名を右クリックし、表示されるコンテキストメニューから[印刷]をクリックします。 「コード」がチェックされていることを確認し、「OK」をクリックします。プリンタは、最後のダイアログで使用できる[設定...]メニューから変更できます。
ちなみに、スタンドアロンモジュール、SQL、テーブルなどは、[データベースツール]タブの[分析]グループの[データベースドキュメンテーション]から印刷できます。
Accessクエリの基礎となるSQLの並べ替えとアウトライン化に非常に役立ちます。
VBA用の無料の MZ-Tools をダウンロードして、検索/置換機能を使用することをお勧めします。
編集
MZ-Tools forVBAは使用できなくなりました。有料版は、新しいオフィスのインストールで動作します。