|
まず、テーブルの一覧を取得してみます。カレントデータベースに含まれるすべてのテーブルを列挙するには次のコードを実行します。
Dim dbs As Database
Dim tdf As TableDef
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
Debug.Print tdf.Name
Next tdf
データベース内のすべてのテーブルの集まり(コレクション)である TableDefs
から1つずつテーブルオブジェクトを For Each〜Next で取り出します。
|
ところがこのコードを実行すると、システムテーブルや隠しテーブルまで表示されてしまいます。これらを除外してユーザーが作ったテーブルだけを表示するには、テーブルの属性([Attributes]プロパティ)によって選別してやる必要があります。それにはコードを次のように修正します。
For Each tdf In dbs.TableDefs
With tdf
If ((.Attributes And dbSystemObject) Or _
(.Attributes And dbHiddenObject))
= 0 Then
Debug.Print .Name
End If
End With
Next tdf
|
|
クエリーの場合も、テーブルの場合の TableDefs の代わりに QueryDefs を使うことによって同様の方法で一覧を取得することができます。
Dim qdf As QueryDef
For Each qdf In dbs.QueryDefs
Debug.Print qdf.Name
Next qdf
この場合にも、テーブルでシステムテーブルや隠しテーブルが表示されたのと同様に、フォームなどの[レコードソース]プロパティにクエリー名ではなくSQL文が設定されていると
'〜' で始まる見覚えのないクエリー名が列挙されてしまいます。
|
どうやらSQL文で設定したつもりでもAccess内部では保存済みのクエリーとして管理されているようです。
これを除外するにはコードを次のように修正します。なお、ここで使っている[Type]プロパティの &HF という値は定数としてはないようです。
For Each qdf In dbs.QueryDefs
With qdf
If (.Type And &HF) = 0 Then
Debug.Print .Name
End If
End With
Next qdf
|
|
テーブルやクエリーはAccessのオブジェクトというよりは、VBやExcelからも直接アクセスできるようなJETデータベースエンジン(DAO)のオブジェクトです。Access固有のオブジェクトであるフォームやレポートなどについては[Containers]コレクションや[Documents]コレクションから情報を取得します。
次のコードはフォーム名の一覧を列挙するものです。
|
Dim dbs As Database
Dim ctn As Container
Dim doc As Document
Set dbs = CurrentDb
Set ctn = dbs.Containers!Forms
For Each doc In ctn.Documents
Debug.Print doc.Name
Next doc
|
|
レポートやマクロ、モジュールについても、フォームの場合の Containers!Form
の代わりにそれぞれ "Report"、"Script"、"Module" を使うことによって同様の方法で一覧を取得することができます。
Dim dbs As Database
Dim ctn As Container
Dim doc As Document
Set dbs = CurrentDb
'レポートの一覧
Set ctn = dbs.Containers!Reports
For Each doc In ctn.Documents
Debug.Print doc.Name
Next doc
|
'マクロの一覧
Set ctn = dbs.Containers!Scripts
For Each doc In ctn.Documents
Debug.Print doc.Name
Next doc
'モジュールの一覧
Set ctn = dbs.Containers!Modules
For Each doc In ctn.Documents
Debug.Print doc.Name
Next doc
|