この記事では、Accessのデータベースからクエリの名称を全て取得する方法についてご説明します。
【動画】Accessのデータベースからクエリの名称を全て取得する実際の動き
本題に入る前に、まずは次の動画をご覧ください。
QueryDefオブジェクトのインスタンスを生成し、Accessのデータベースからクエリの名称を取得しています。
クエリの名称はNameプロパティを使い、取得したクエリの名称をセルに出力しています。
マクロ作成の流れ
コードの例
Excelのマクロのコード(例)
Option Explicit Sub test() Dim accDBNM As String 'Accessのデータベースファイル Dim db As Object 'Databaseオブジェクト変数 Dim dbe As Object 'DBEngineオブジェクト変数 Dim qdf As Object 'QueryDefオブジェクト用変数 Dim cnt As Integer 'カウンタ用変数 'カレントディレクトリのデータベースパスを取得 accDBNM = ActiveWorkbook.Path & "\" & "0172.mdb" 'カウンタを初期化する cnt = 1 'DBEngineオブジェクトのインスタンスを生成する Set dbe = New DAO.DBEngine 'Accessのデータベースを開く Set db = dbe.OpenDatabase(accDBNM) 'クエリの数だけ処理を繰り返すループ For Each qdf In db.QueryDefs 'クエリの名称をセルに出力する Worksheets("work").Range("A" & cnt).Value = qdf.Name cnt = cnt + 1 Next 'データベースを閉じる db.Close '後処理 Set db = Nothing Set dbe = Nothing Set qdf = Nothing End Sub
注目すべきコード①
最初に見て頂きたいのは12行目です。
'カレントディレクトリのデータベースパスを取得 accDBNM = ActiveWorkbook.Path & "\" & "0172.mdb"
以上のコードは、Accessのデータベースファイルの格納先を取得するコードです。
注目すべきコード②
次に見て頂きたいのは18行目から21行目です。
'DBEngineオブジェクトのインスタンスを生成する Set dbe = New DAO.DBEngine 'Accessのデータベースを開く Set db = dbe.OpenDatabase(accDBNM)
以上のコードは、Accessのデータベースを開く処理のコードです。
18行目でDBEngineオブジェクトのインスタンスを生成し、そのインスタンスのOpenDatabaseメソッドの引数にデータベース(のフルパス)を引数に指定して実行します。
正常にOpenDatabaseメソッドが実行されると、Accessのデータベースにあるクエリの名前が取得できるようになります。
注目すべきコード③
次に見て頂きたいのは24行目から31行目です。
'クエリの数だけ処理を繰り返すループ For Each qdf In db.QueryDefs 'クエリの名称をセルに出力する Worksheets("work").Range("A" & cnt).Value = qdf.Name cnt = cnt + 1 Next
以上のコードは、Accessのデータベースにあるクエリの数だけ、そのクエリの名前をExcelのシートに出力する処理のコードです。
24行目のコードは、クエリの数だけ処理を繰り返すループのFOR文です。
27行目のコードは、Nameプロパティからクエリの名称を取得してExcelのシートに出力しています。
動作確認
マクロ実行前
以下のAccessのデータベースにクエリが登録されており、このクエリの名前をExcelのシートに出力します。
マクロ実行後
マクロの実行が正常に完了すると、以下のようにクエリの名前が出力されました。
【注意】参照設定が必要です
一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。
参照設定の一覧(下の画像を参考)から次の項目(ライブラリ)にチェックを付けて「OK」ボタンをクリックします。
- microsoft office 15.0 access database engine object library(ACEDAO.DLL)
なぜ必要かというと、Excelのマクロのコードの18行目の「DAO.DBEngine」というオブジェクトが「ACEDAO.DLL」というファイルを参照するからです。
'DBEngineオブジェクトのインスタンスを生成する Set dbe = New DAO.DBEngine
この参照設定をしないと下の画像のエラーが出ますので必ず行う必要があります。
ここでは「ACEDAO.DLL」とは何者かについては記事の本題から逸れてしまうので詳細は割愛しますが、マクロで「DAO.DBEngine」というオブジェクトを使う場合は参照設定しないと動かない、程度に思って頂ければと思います。
最後に
本記事では、Accessのデータベースからクエリの名称を全て取得する方法についてご説明しました。
Accessのクエリの名称を取得したい時は本記事を参考にしてみてくださいね。
Excelのスキル向上やExcelの基礎知識をしっかりと学びたいなら
Excelのスキルを習得したい、Excelの基礎知識をもっと理解したい、そう考えているなら「無期限サポート付きExcel講座【すごい改善】」がおすすめです。
Excelのスキルの基礎を身につけるなら【すごい改善】で無期限サポート付きがあるので、これで「Excelのスキルや基礎」を学ぶのにおすすめですよ。