2012-04-12 6 views
15

私は、以前の開発者が多くの自動化されたタスクを作成した新しい会社で仕事を始めました。もちろん、ドキュメントは事実上ありません。以前の開発者と作業する機会はありませんでしたので、これらのすべてのプロセスを調べて、特定のファイルを変更する方法を探しています。VBAコードファイルを検索する方法

私はすべてのストアドプロシージャをSQLでスクリプト化し、検索ツールを使用していましたが、私が探していたものが見つかりませんでしたので、必要なプロセスが多数のAccessデータベース中古。 SQL Serverでは、procsをスクリプトで記述できるようにC#アプリケーションを記述するのは簡単でしたが、Accessを使用すると、各データベースを個別に開いてコードファイルを検索するように見えます。

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

+2

ない考え、それはアセスでは同じだが、ここで私はExcelでそれを行うだろうかだ場合:http://www.cpearson.com/Excel/vbe.aspx –

+2

ため、このCodeProjectのプロジェクトを通じて見てアイデア - http://www.codeproject.com/Articles/18029/SourceTools-xla。プロジェクトの保存機能と、vbaプロジェクトのすべてのソースファイルをどのように解析するかを調べます。 – ja72

+0

@ ja72もしそのアドインがAccessのために働くなら、それを修正することができれば、もし私が会うなら、私はあなたに二重の五を与えるでしょう。 –

答えて

13

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

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オブジェクトモデルを使って、各モジュールの各行を読み込んでテキストファイルに書き出すこともできます。それは理想的なので、自分で作成するのではなく、使用していたテキスト検索ツールを使用できます。 –

+0

はい、可能です。しかし、Application.SaveAsTextを使用して各モジュールをテキストファイルとして保存することができます。 – HansUp

+0

+1うまくやった。 – brettdj

5

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

Start Find Find Results

編集

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

+3

MZ-Toolsはすばらしいアドインです。私はVB6開発を行ったときはいつも使っていましたが、HansUpは個々のファイルを開く必要のないソリューションを探していることを訂正してください。 –

3

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

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

Right Click "Print" Check Box "Code"

- 「データベース・ツールの、「分析」グループでは、「データベース解析ツール」から、単独で、モジュール、SQL、テーブルなどをスタンド印刷に利用されています" タブ。

基本的なSQLのソートとアウトラインのために、Accessクエリを非常に便利です。

Database Documenter

関連する問題