参照設定を行わないでAccessを扱う
Sub 関数を使用してAccessを取得() '参照設定を行わないでAccessを扱う '総称オブジェクト型変数を宣言 Dim objAcc As Object 'Accessアプリケーションのインスタンスを作成 Set objAcc = CreateObject("Access.Application") MsgBox "Accessのバージョンは" & objAcc.Version & "です。" Set objAcc = Nothing End Sub
実行結果
ブック配布時に配布先PCと開発PCのAccessバージョンが違うと、参照設定が機能しない。
この問題を回避するには、「CreateObject」関数を使用して、「配布先のPCに『Access.Application』として認識されているAccessのアプリケーション」を動的に取得する。
「CreateObject」関数は「Access.Application」と言う文字列(OLEプログラムID)で登録されているActiveXオブジェクト(Accessアプリケーション)を返す。
インストールされているAccessのバージョンが異なっていても同じように動作するが、バージョンごとのVBAの仕様の違いは吸収できない。
たとえば、Access2003から追加されたメソッドをAccess2002しかインストールされていないPCで使用とすると、Accessアプリケーションを作成する所までは「CreateObject」関数で実行できるが、メソッド実行時にエラーが発生する。
開発時は参照し、配布時には参照を外す
参照設定を行ってコーディングする時のメリット
- 実行時に事前バインディングを行えるので、処理速度の向上が見込める
- インテリセンス機能(入力候補の表示機能)を使えるため、コードの作成が楽になる
開発時だけ参照設定を行い、データ型を指定してインテリセンス機能を使って、コードを記述し、配布時にはオブジェクト型変数を総称オブジェクト型で宣言するように変更する。
開発時 | 配布時 | |
---|---|---|
変数宣言 | Dim objAcc As Access.Application | Dim objAcc As Object |
Newキーワード部分 | Set objAcc = New Access.Application | Set objAcc = CreateObject("Access.Application") |