#179 もう1つのAccessデータベースを開く方法(COM版) VBA

"COM"と聞くと一歩後退りしたくなる感もありますが、ExcelやWordなども含めた、Officeアプリケーションを相互利用するような仕組みにおいては、最もスタンダードかつ多機能な方法といえるでしょう。

以下の例では、単純にもう1つのAccessを起動してデータベースファイルを開くだけですが、COMを使うと、Accessを起動したあとにも、呼び出し側からさまざまなコントロールが可能であるというメリットがあります(具体例は「#180 もう1つのAccessのフォームやコントロールを制御する方法」を参照)。

まず、基本的なコーディングを例示します。
Sub test()

  Dim acApp As Access.Application
  Dim strDBPath As String

  'データベースファイルのパスを設定( " の数に注意)
  strDBPath = "C:\My Documents\db1.MDB"

  'オブジェクト変数のインスタンス化
  Set acApp = New Access.Application
  'Accessオブジェクトを表示
  acApp.Visible = True
  'データベースファイルをオープン
  acApp.OpenCurrentDatabase strDBPath

End Sub

これで、確かにもう1つのAccessが起動され、db1.MDBが開かれるのですが、大きな問題があります。それは、もう1つのAccessは変数"acApp"で保持されているために、このプロシージャを抜けるとその変数が無効となり、それと同時にもう1つのAccessも終了してしまうという点です。

そこで、Publicな変数として"acApp"を宣言することによって、変数の有効範囲(寿命)を長くしてやる必要があります。次の例では、あるフォームに[Accessを開く]というボタンを用意し、それによってもう1つのAccessを起動、データベースファイルを開きます。そして、このフォームの終了とともに、もう1つのAccessを終了させるようにしています。

フォームの例:
もう1つのAccessを開くボタンの例

フォームのクラスモジュール例:
Option Compare Database
Option Explicit

Private acApp As Access.Application   'もう1つのAccessのインスタンス

Private Sub cmdExeAccess_Click()
'[Accessを開く]ボタンクリック時

  Dim strDBPath As String

  strDBPath = "C:\My Documents\db1.MDB"

  Set acApp = New Access.Application
  acApp.Visible = True
  acApp.OpenCurrentDatabase strDBPath

End Sub


Private Sub Form_Close()
'フォームの閉じる時

  'もう1つのAccessを起動せずに閉じる場合の対処
  On Error Resume Next

  'もう1つのAccessを終了
  acApp.Quit
  'インスタンスを破棄
  Set acApp = Nothing

End Sub
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved