2011-06-20 5 views
5

オブジェクトプロパティなどの特定のテキストを検索する方法はありますか? VBAのソースコードだけではありません。プロパティでのテキスト検索アクセスオブジェクト

たとえば、テーブルのフィールドの名前を変更すると、多くのオブジェクトプロパティ(レコードソース、コントロールソース、注文者など)をチェックする必要があります。これは、トレイルとエラー、またはフォームの各コントロールのすべてのプロパティをチェックすることで実行できますが、それには多くの時間がかかります。

1つのオプションはFind and Replaceツールです(すてきなツールです)。しかし、それは私にとって少し残念です。私はテキストを交換する必要はありません( 'find'のみ)、1年に数回しか使用しないツールの場合は37ドルです。

その他のおすすめ?

答えて

14

たとえば、サブクエリ内のバウンドコントロールのRowSource内で、どこかの機能やクエリが予期せぬ場所に隠れている可能性があることがわかりました。

すべてのAccessオブジェクトを生のテキストファイルとしてエクスポートするには、文書化されていない機能を使用します。
フォルダ内のファイル(例えば、フリーNotepad++のように)内で再帰的にファイルを検索できるテキストエディタを使用すると、特定の文字列がすべて埋め込まれていることがわかります。すべてのオブジェクトをエクスポートするため

コードは、私のIsBlank() functionが含まれています

'==================================================================== 
' Name: DocDatabase 
' Purpose: Documents the database to a series of text files 
' From: http://www.datastrat.com/Code/DocDatabase.txt 
' Author: Arvin Meyer 
' Date: June 02, 1999 
' Comment: Uses the undocumented [Application.SaveAsText] syntax 
'   To reload use the syntax [Application.LoadFromText] 
'   Modified to set a reference to DAO 8/22/2005 
'   Modified by Renaud Bompuis to export Queries as proper SQL 
'==================================================================== 
Public Sub DocDatabase(Optional path As Variant = Null) 
    If IsBlank(path) Then 
     path = Application.CurrentProject.path & "\" & Application.CurrentProject.Name & " - exploded view\" 
    End If 

    On Error Resume Next 
    MkDir path 
    MkDir path & "\Forms\" 
    MkDir path & "\Queries\" 
    MkDir path & "\Queries(SQL)\" 
    MkDir path & "\Reports\" 
    MkDir path & "\Modules\" 
    MkDir path & "\Scripts\" 

    On Error GoTo Err_DocDatabase 
    Dim dbs As DAO.Database 
    Dim cnt As DAO.Container 
    Dim doc As DAO.Document 
    Dim i As Integer 

    Set dbs = CurrentDb() ' use CurrentDb() to refresh Collections 

    Set cnt = dbs.Containers("Forms") 
    For Each doc In cnt.Documents 
     Application.SaveAsText acForm, doc.Name, path & "\Forms\" & doc.Name & ".txt" 
    Next doc 

    Set cnt = dbs.Containers("Reports") 
    For Each doc In cnt.Documents 
     Application.SaveAsText acReport, doc.Name, path & "\Reports\" & doc.Name & ".txt" 
    Next doc 

    Set cnt = dbs.Containers("Scripts") 
    For Each doc In cnt.Documents 
     Application.SaveAsText acMacro, doc.Name, path & "\Scripts\" & doc.Name & ".txt" 
    Next doc 

    Set cnt = dbs.Containers("Modules") 
    For Each doc In cnt.Documents 
     Application.SaveAsText acModule, doc.Name, path & "\Modules\" & doc.Name & ".txt" 
    Next doc 

    Dim intfile As Long 
    Dim filename as String 
    For i = 0 To dbs.QueryDefs.count - 1 
     Application.SaveAsText acQuery, dbs.QueryDefs(i).Name, path & "\Queries\" & dbs.QueryDefs(i).Name & ".txt" 
     filename = path & "\Queries(SQL)\" & dbs.QueryDefs(i).Name & ".txt" 
     intfile = FreeFile() 
     Open filename For Output As #intfile 
     Print #intfile, dbs.QueryDefs(i).sql 
     Close #intfile 
    Next i 

    Set doc = Nothing 
    Set cnt = Nothing 
    Set dbs = Nothing 

Exit_DocDatabase: 
    Debug.Print "Done." 
    Exit Sub 

Err_DocDatabase: 
    Select Case Err 

    Case Else 
     MsgBox Err.Description 
     Resume Exit_DocDatabase 
    End Select 

End Sub 

ちょうどそれが下のディレクトリのセットと「分解図」を作成し、アクセスIDEのイミディエイトウィンドウからDocDatabaseを呼び出し、それを使用するにはすべてのファイルを含むフォルダー。

+0

GREAT !!ありがとうございました。 – waanders

+0

+1 IsBlank()funtionへのリンクを追加しました。ニースのブログ。それは私には役に立ちます。 – HansUp

+1

'オプションのパスAs String =" "'が好きだと思っていますが、それはおそらく私ができる限りどこでも変種を避けることでしょう。 – HansUp

1

もう1つの方法は、NAME AUTOCORRECTオプションを一時的にオンにすることです。これは実装が難しい機能であり、実稼働環境ではデータベースにダメージを与えることがありますが、他の人が作成したAccessアプリを引き継いで私の命名規則を使用するように変換するときは、

基本的にはオンにして、依存関係テーブルを作成させてから変更します。次に、依存関係のツリーを歩いて、それらがすべて得られたことを確認できます。あなたが終わったら、あなたはそれをオフにします。

ただし、VBAコードでは機能しません。しかし、フィールド名などを変更する場合は、注意深く使用するとかなり便利です。

+0

ありがとう!いくつかのグーグルの後に私はまた、これを発見:http://www.allenbrowne.com/ser-73.html – waanders

1

私は次のようにオブジェクト名に「〜」で一時オブジェクトを取り除くために上記のコードを改正:

Set cnt = dbs.Containers("Scripts") 
For Each doc In cnt.Documents 
    If Not doc.Name Like "~*" Then 
     Application.SaveAsText acMacro, doc.Name, path & "\Scripts\" & doc.Name & ".txt" 
    End If 
Next doc 
関連する問題