教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA 外部アプリケーション連携】(Access連携)Accessテーブルに接続する及び切断するにはどうすればいいの?教えて!

f:id:m_kbou:20200512090631p:plain

ExcelVBAよりAccessデータベースに含まれるテーブルデータを操作するには、Accessデータベース接続後にテーブルに接続する必要があります。また、接続にてデータ操作が完了した後は、Accessデータベースとテーブルの切断作業も必要となります。今回はテーブルの接続と切断方法について説明します。

 

 

構文

記述方法は以下の通りとなります。

(1)テーブルへの接続方法

①データベースへの接続
Set[変数1]= OpenDatabase(”[データベースの登録パス]”)

Set[変数2]=[変数1].OpenRecordset(”[SQL文]”)

[説明]:

Accessテーブルとの接続には

 「Set[変数2]=[変数1].OpenRecordset(”[SQL文]”)」

と記述します。

f:id:m_kbou:20220111090931p:plain

-------------------------------

※Accessテーブルを操作するには、事前にAccessデータベースへの接続(上記①データベースへの接続)の指定が必要となります。データベースへの接続/切断についてはこちらを参照して下さい。

-------------------------------

[記述例]:

Set r = db.OpenRecordset("select * from T_従業員")

(2)テーブルからの切断方法

[変数2].Close
Set[変数2]= Nothing

①データベースの切断
[変数1].Close
Set[変数1]= Nothing

[説明]:

テーブルへ接続をした場合には必ず切断処理が必要となります。
(接続と切断は一連の処理と理解して下さい。)

接続されたAccessテーブルを切断するには

 「[変数2].Close」及び「Set[変数2]= Nothing」

と記述します。

f:id:m_kbou:20220111090756p:plain

-------------------------------

※Accessテーブルを切断した後は、データベースの切断(上記①データベースの切断)の指定が必要となります。データベースへの接続/切断についてはこちらを参照して下さい。

-------------------------------

[記述例]:

r.Close
Set r = Nothing

 

使い方

使い方について具体的に説明します。

[プログラミング例]:

Sub サンプル()

  '↓処理①
  Dim db As Database
  Dim r As Recordset

  '↓処理②
  Set db = OpenDatabase("C:\テスト\従業員.accdb")

  '↓処理③
  Set r = db.OpenRecordset("select * from T_従業員")

  '↓処理④
  MsgBox "テーブルに接続しました。"

  '↓処理⑤
  r.Close
  Set r = Nothing

  '↓処理⑥
  MsgBox "テーブルを切断しました。"

  '↓処理⑦
  db.Close
  Set db = Nothing

End Sub

処理の流れは以下の通りとなります。

[処理①]:変数定義
データベースやテーブルへの接続を格納するための変数定義となります。

[処理②]:データベースへの接続
指定したデータベースに接続した後に[処理①]で定義した変数:dbに接続内容を格納します。今回はC:\テストに登録されている「従業員.accdb」を格納しました。(※データベースへの接続についてはこちらを参照して下さい。)

[処理③]:テーブルへの接続
指定したテーブルに接続した後に[処理①]で定義した変数:rに接続内容を格納します。今回は「T_従業員」テーブルを格納しました。(※「T_従業員」テーブルはデータベース:従業員.accdbの中に含まれています。)

[処理④]:テーブル接続メッセージ
[処理③]のテーブルの格納(接続)が正常に終了した場合、”テーブルに接続しました。”をMsgBoxで値を表示します。

[処理⑤]:テーブルの切断
[処理④]で接続したテーブルを切断します。

[処理⑥]:テーブル切断メッセージ
[処理⑤]のテーブル切断が正常に終了した場合、”テーブルを切断しました。”をMsgBoxで表示します。

[処理⑦]:データベースの切断
[処理②]で接続したデータベースの切断を行います。(※データベースの切断についてはこちらを参照して下さい。)

f:id:m_kbou:20210513175239p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。また、Accessデータベースとの接続には事前設定が必要となります。事前準備はこちらを参考にして下さい。

[実行例]:

(事前準備)

C:\テストにAccessデータベース(従業員.accdb)が登録されている必要があります。

f:id:m_kbou:20200512090657p:plain

また、従業員.accdbデータベースの中には、T_従業員テーブルが登録されている必要があります。

f:id:m_kbou:20210625102649p:plain

(実行内容)

①<実行>ボタンには上記のプログラミング例のプログラムが登録されています。この<実行>ボタンをクリックします。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210513175300p:plain

②テーブルに接続できたため「テーブルに接続しました。」がMsgBoxで表示されます。

f:id:m_kbou:20210513175317p:plain

③テーブルから切断したため「テーブルを切断しました。」がMsgBoxで表示されます。

f:id:m_kbou:20210513175329p:plain

※従業員.accdbにT_従業員テーブルが登録されていない場合は、以下の様な警告メッセージが表示され、接続ができなかった事を確認できます。

f:id:m_kbou:20200512090742p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

Accessテーブルに接続する及び切断する方法についての説明は以上です。

 

おわりに

今回はAccessテーブルに接続及び切断する方法について説明しました。上記でも説明しましたが、Accessテーブルへ接続する場合にはデータベース接続後にテーブル接続が必要となりますので注意して下さい。また、Excel⇔Accessの連携には事前の準備作業が必要となります。こちらは予め実施しておくようにお願いします。