vba を使用した excel と accessの接続は、ADOまたはオートメーションで簡単に実現できます!
vba excel access 簡単です! Homeへ
接続
vbaによる有効な2つの「接続」方法は、ado と オートメーションです。
データ処理には軽快な ado 、データ以外のAccessオブジェクトには、オートメーションが有効です。
接続の動作確認は、Office 2007、2010で行いました。
1. ADO(ActiveX Data Objects)を利用して接続する方法
※ まず、VBEウィンドウの「ツール」ー「参照設定」で Microsoft ActiveX Data Objects X.XX Library にチェックを入れます。
X.XX は、Libraryのバージョンです。 まず、最新版のLibraryをチェックしましょう。
接続 手順は、主に次の通りです。
※ ( )内の番号は、後半の vba ステートメントのコメントの番号と対応しています。
(1) ADOのConnectionオブジェクトの変数を宣言します。
(2) 新しいConnectionオブジェクトを生成し、そのオブジェクトを「参照」するため、宣言した変数に代入します。
(3) Office 2010 の「信頼できる場所」にあるaccdbと接続します。
この場所のファイルは、信頼できる、とした結果保存する場所なので、ファイルを開く「警告」が表示されません。
この例のADOの場合、別の保管場所でも動作します。
場所の選択は、「ファイル」−「オプション」ー「セキュリティーセンター」ー「セキュリティーセンター」ボタンを押し、「信頼できる場所」です。
Providerは、最新の Microsoft.ACE.OLEDB.12.0 を指定しなければなりません。
なお、Office 2000から2003までは、Microsoft.Jet.OLEDB.4.0です。
Office 97は、Microsoft.Jet.OLEDB.3.5.1 です。
(4) 接続を解除するには、Closeメソッドを実行します。 ※ (5)のリソースをクリアする場合、省略できます。
(5) オブジェクト参照に使用されたリソースをクリアし、使用可能メモリ容量を大きくする必要があります。
このリソース解除を行わない場合、使用可能メモリ容量が減るので、excelの動作が遅くなります。
次のステートメントは、上記で説明したADOを利用したaccessDBとの接続・解除の手順を実行します。
Dim oCn As ADODB.Connection '(1)
Set oCn = New ADODB.Connection '(2)
oCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\Program Files\Microsoft Office\Office14\ACCWIZ\Imp_Accdb.accdb;" '(3)
oCn.Close '(4)
Set oCn = Nothing '(5)
2. オートメーションにより接続する方法
この方法は、1993年にMicrosoftから発表されました。(※ OLE Automation Wikipedia より引用 )
Accessは、オートメーションに対応したアプリケーションです。
Officeのバージョンがオートメーションに対応している場合、活用できます。
したがって、その場合、excel から vba により、accessの機能をオブジェクトを参照することにより利用できます。
オートメーションを利用した「接続」が簡単にでき、access のテーブルを操作できます。
その結果、データをインポート・エクスポート出来ることが分かります。
実際、接続は、主に次の手順で実行できます。
( )内の番号は、後半の vba ステートメントのコメントの番号と対応しています。
(1) オブジェクトの変数を宣言します。
(2) Accessが起動されている場合、そのAccessを利用して処理効率を向上させます。
新しいAccessを起動するオーバーヘッド時間が無い場合、ユーザーのストレスを軽減する効果があります。
1) エラーが出た場合、次のステートメントを実行させます。
2) 実行中のAccessのオブジェクトを参照するため、オブジェクト変数に代入します。
3) エラーが発生した場合、Accessが起動していないことが分かります。
4) エラーをクリアーします。
(3) Accessオブジェクトを新しく作成し、そのオブジェクトを「参照」するため、宣言した変数に代入します。
(4) AccessDBに接続します。
この場所のファイルは、信頼できる、とした結果保存する場所なので、ファイルを開く「警告」が表示されません。
前の例と同様、この例の場合、「信頼できる場所」としています。 しかし、別の保管場所でも動作します。
場所の選択は、「ファイル」−「オプション」ー「セキュリティーセンター」ー「セキュリティーセンター」ボタンを押し、「信頼できる場所」です。
(5) 通常にaccessを使用できるため、accessが見える設定にします。
(6) 接続を解除するには、Closeメソッドを実行します。 ※ (7)のリソースをクリアする場合、省略できます。
(7) オブジェクト参照に使用されたリソースをクリアし、使用可能メモリ容量を大きくする必要があります。
このリソースクリアを行わない場合、使用可能メモリ容量が急速に減るため、excelの動作が遅くなってきます。
理由は、オートメーションのオブジェクトの参照で割り当てられるメモリ容量が大きいからです。
次のステートメントは、上記で説明したオートメーションを利用したaccessDBとの接続・解除の手順を実行します。
Dim oApp As Object '(1)
On Error Resume Next '(2)−1)
Set oApp = GetObject(, "Access.Application") '(2)−2)
If Err.Number <> 0 Then '(2)−3)
Err.Clear '(2)−4)
Set oApp = CreateObject("Access.Application") '(3)
End If '(2) −3)
oApp.OpenCurrentDatabase "C:\Program Files\Microsoft Office\Office14\ACCWIZ\Imp_Accdb.accdb" '(4)
oApp.Visible = True '(5)
oCn.Close '(6)
Set oCn = Nothing '(7)
※ 上記2つのマクロの使用例は、「エクスポート」記事で説明しました。
ADOとオートメーションのvba を使用した excel と access の接続を活用しましょう!
vba excel access 簡単です! Homeへ