カレントデータベース内にあるテーブル名の一覧とともに、それぞれのテーブルに保存されているレコード数を収集します。
- まず「Databaseオブジェクト」の変数である「dbs」に”カレントデータベース”をセットします。
- そのデータベース内にあるすべてのテーブルのコレクションである「TableDefs」の中から、For Each~Nextステートメントでひとつずつテーブル情報を取り出し、「TableDefオブジェクト」の変数「tdf」にセットしていきます。
- TableDefsコレクションにはシステムテーブルや隠しテーブルも含まれているので、「Attributes」プロパティの値からテーブル属性を判断し、If文でそれらを除外します。
- さらに、同様に「Attributes」プロパティによってそのテーブルがカレントデータベース内にあるローカルテーブルであるか、もしくは外部のデータベースのリンクテーブルであるかを判別します。
- もしローカルテーブルであれば、TableDefの「RecordCount」プロパティによって保存レコード数を取得し、その値をイミディエイトウィンドウに出力します。
- 一方、リンクテーブルの場合はRecordCountの値は常に「-1」となってしまいますので、「DCount」関数を使ってレコード数を取得し、イミディエイトウィンドウに出力します。
Sub Sample_1_02()
'テーブル名とそのレコード数を収集する
Dim dbs As Database
Dim tdf As TableDef
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
With tdf
If ((.Attributes And dbSystemObject) Or _
(.Attributes And dbHiddenObject)) = 0 Then
Debug.Print .Name,
If (.Attributes And dbAttachedTable) = 0 Then
'ふつうのローカルテーブルの場合
Debug.Print .RecordCount
Else
'リンクテーブルの場合
Debug.Print DCount("*", .Name)
End If
End If
End With
Next tdf
End Sub
実行例:
|