この記事では、Accessのデータベースの標準テーブル名を取得する方法についてご説明します。
【動画】Accessのデータベースの標準テーブル名を取得する実際の動き
本題に入る前に、まずは次のツイートをご覧ください。
※無駄なコードがあったので、そのコードを削除したマクロを実行した動画を撮り直しました😅
無駄にADODB.Connectionを使っていたところとか…😅 pic.twitter.com/otoNLzCmyZ
— まさ@Excel、VBA、マクロ(経験年数16年) (@masamasa9785) September 5, 2021
マクロがAccessのデータベースの標準テーブル名を取得しています。
(取得した標準テーブル名をE列のセルに書き出しています)
Accessのデータベースの標準テーブル名はTableオブジェクトのNameプロパティから取得することができる
Accessのデータベースの標準テーブル名はTableオブジェクトのNameプロパティから取得することができます。
ここでいうTableオブジェクトは、ADOXのTableオブジェクトのことです。
【参考】ADOXの基礎
Accessのデータベースの標準テーブル名を取得する方法
Accessのデータベースの標準テーブル名を取得するには、次の流れの通りにコードを書いていきます。
Excelのマクロ
接続情報はCatalogオブジェクトのインスタンスのActiveConnectionプロパティに設定します。
Accessのデータベースの標準テーブル名はTableオブジェクトのNameプロパティから取得します。
コードの例
Excelのマクロのコード(例)
Dim DBName As String 'データベース名 Dim cnt As Long 'カウンタ Dim objCat As New ADOX.Catalog 'データソースのスキーマカタログを記述するコレクション Dim objTable As New ADOX.Table '列、インデックス、およびキーを含むデータベーステーブル 'カウンタを初期化する cnt = 2 'カレントディレクトリのデータベースパスを取得 DBName = ActiveWorkbook.Path & "\" & "0071.mdb" 'データベース接続情報の取得 objCat.ActiveConnection = "provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" _ & DBName & "" For Each objTable In objCat.Tables Select Case objTable.Type Case "TABLE" 'Accessの標準テーブルをF列のセルに設定する Range("E" & cnt).Value = objTable.Name cnt = cnt + 1 End Select Next '各終了処理 If Not objCat Is Nothing Then Set objCat = Nothing
コードの解説
注目すべきコード①
最初に見て頂きたいのは17行目から31行目です。
For Each objTable In objCat.Tables '存在するテーブルやクエリ、フォームなどの数だけループさせる Select Case objTable.Type Case "TABLE" '「TABLE」の場合 'Accessの標準テーブルをE列のセルに設定する Range("E" & cnt).Value = objTable.Name cnt = cnt + 1 End Select Next
17行目のFor文で、Accessのデータベースに存在するテーブルやクエリ、フォームなど全ての中(Tablesコレクション)からAccessのデータベースの標準テーブル名を探して特定させるためループさせます。
ループ中はTableオブジェクトのTypeプロパティの値を確認します。(20行目のSelect Caseで)
TableオブジェクトのTypeプロパティの値が「TABLE」の場合(22行目)は、Accessのデータベースの標準テーブル名になります。
Accessのデータベースの標準テーブル名はnameプロパティから取得することができます。
(取得したAccessのデータベースの標準テーブル名をE列のセルに設定しています)
注目すべきコード②
次に見て頂きたいのは11行目から16行目です。
'カレントディレクトリのデータベースパスを取得 DBName = ActiveWorkbook.Path & "\" & "0071.mdb" 'データベース接続情報の取得 objCat.ActiveConnection = "provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" _ & DBName & ""
11行目でAccessのデータベースの標準テーブル名を取得したい対象のデータベース名を指定しています。
14行目で、11行目で指定したデータベース「0071.mdb」に対する接続情報をActiveConnectionプロパティに渡すことで、Accessのテーブルやビューを参照することができるようになります。(カタログが開きます)
Accessのデータベースの標準テーブル名を取得した結果
Accessのデータベースの標準テーブル名を取得した結果は下の画像になります。
F列のセルに、取得したAccessのデータベースの標準テーブル名が書き込まれています。
ちなみに、Accessのデータベース「0071.mdb」の標準テーブル名を直接見てみると次の通りです。
Excelのシートに書き出されたAccessのデータベースの標準テーブル名と名前と数が一致していることが確認できます。
【注意】参照設定が必要です
一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。
参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。
- Microsoft ADO Ext. 2.8 for DDL and Security(msadox28.tlb)
なぜ必要かというと、先ほどのコードの3行目の「ADOX.catalog」と4行目の「ADOX.Table」というオブジェクトが「msadox28.tlb」というファイルを参照するからです。
Dim objCat As New ADOX.Catalog 'データソースのスキーマカタログを記述するコレクション Dim objTable As New ADOX.Table '列、インデックス、およびキーを含むデータベーステーブル
この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。
ここでは「msadox28.tlb」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、マクロで「ADOX.catalog」「ADOX.Table」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。
最後に
本記事では、Accessのデータベースの標準テーブル名を取得する方法についてご説明しました。
Accessのデータベースの標準テーブル名は、ADOXのTableオブジェクトのNameプロパティから取得することができます。
Accessのデータベースの標準テーブル名を取得したい時に本記事を参考にしていただけたら幸いです。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。