#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を終了させるようにしています。 フォームの例: フォームのクラスモジュール例: 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 |
|||
|
Copyright © T'sWare All rights reserved |