5 テーブル系 - 特定のフィールド名を使っているテーブルを収集する

カレントデータベース内にある各テーブルとフィールドを探索し、フィールド名に特定の文字列を含むテーブルとそのフィールド名を収集します。
  1. まず「Database」オブジェクトの変数である「dbs」に”カレントデータベース”をセットします。

  2. そのデータベース内にあるすべてのテーブルのコレクションである「TableDefs」の中から、For Each〜Nextステートメントでひとつずつテーブル情報を取り出し、「TableDef」オブジェクトの変数「tdf」にセットしていきます。

  3. TableDefsコレクションにはシステムテーブルや隠しテーブルも含まれているので、「Attributes」プロパティの値からテーブル属性を判断し、If文でそれらを除外します。

  4. テーブル内にあるすべてのフィールドのコレクションである「Fields」の中から、For Each〜Nextステートメントでひとつずつフィールド情報を取り出し、「Field」オブジェクトの変数「fld」にセットしていきます。

  5. フィールド名である「Name」プロパティに特定の文字列(ここでは”コード”)が含まれているかどうかを検査します。

    ※ここでは「InStr」関数を使っています。この関数は指定文字列が見つかった場合はその位置を返し、見つからなければ”0”を返しますので、”0より大きければその文字列が含まれている”と判定することができます。

    ※もし、含んでいるかどうかではなく完全に一致しているものを収集したいのであれば、単純に「 If fld.Name = strFind Then」とします。

  6. 指定文字列を含んでいたら、そのテーブル名とフィールド名(それぞれのオブジェクトの「Name」プロパティの値)をイミディエイトウィンドウに出力します。

Sub Sample_1_05()
'特定のフィールド名を使っているテーブルを収集する

  Dim dbs As Database
  Dim tdf As TableDef
  Dim fld As Field
  Dim strFind As String

  strFind = "コード"

  Set dbs = CurrentDb
  For Each tdf In dbs.TableDefs
    With tdf
      If ((.Attributes And dbSystemObject) Or _
          (.Attributes And dbHiddenObject)) = 0 Then
        For Each fld In tdf.Fields
          If InStr(fld.Name, strFind) > 0 Then
            Debug.Print .Name, fld.Name
          End If
        Next fld
      End If
    End With
  Next tdf

End Sub

実行例:
| Index | Prev | Next |



Copyright © T'sWare All rights reserved