VBAで参照設定を設定・解除する(ACCESS)

Home>Information>VBAで参照設定を設定・解除する(ACCESS)

この情報はお役に立ちましたか?よろしければ皆様にもお知らせください。

  このエントリーをはてなブックマークに追加 mixiチェック  

Microsoft AccessでVBAを使ったとき、Access2000、2002、2003などのバージョンによって、参照設定を変えなくてはならないときがあります。

例えば、Access2003においてVBAでExcelを操作する場合、Microsoft Excel 11.0 Object Libraryを参照しますが、2000では、Microsoft Excel 9.0 Object Libraryを参照しなければならず、11.0は「参照不可」と表示され動作しません。

参照を手動で設定する場合

Accessで参照設定を手動で行うには、「ツール」→「マクロ」→「Visual Basic Editor」→「ツール」→「参照設定」を選択し、該当のライブラリにチェックを入れます。

この設定をすると、既に述べたようにバージョンの違うAccessで開くと参照不可になります。参照不可になると、それに関係のないVBAまで動作しなくなることがあります。
(フォームを開くだけのVBAも動作しなくなりました)

この場合、参照不可の設定のチェックをはずし、正しいライブラリにチェックを入れると動作します。

参照を自動で設定する場合

参照をVBAで設定したり解除したりすることはできます。
しかし、既に参照設定を手動で行っている場合は、VBAが動作しないので、自動設定が動作しません。

そこで、予め参照設定をするのをやめておき、フォームを起動したときに参照設定を行い、終了するときに参照設定を解除します。
※終了するときに参照設定を解除しないと、そのまま参照設定が有効になってしまうので、バージョン違いのAccessの入っているコンピュータで開くと、参照エラーになってしまいます。

自動的に参照設定するVBA

On Error Goto Err_Shori
Dim Ref As Reference
Const strExcel As String = "{00020813-0000-0000-C000-000000000046}"
Set Ref = References.AddFromGuid ( strExcel , 1, 3 )
Set Ref = Nothing
Err_Shori:
If Err.Number = 32813 Then
Resume Next
Else
Msgbox Err.Description
End If

これはExcelのライブラリを参照するVBAです。

1行目はエラー処理で、Err_Shori以降に飛ばします。
参照設定が既にされているときは、エラーが出てしまうので、その場合には回避させます。

strExcelに代入した、「00020813-0000-0000-C000-000000000046」は、GUIDというもので、この値がExcelのライブラリを示しています。

自動的に参照を解除するVBA

Dim Ref As Reference
For Each Ref In References
If Ref.Name = "Excel" Then
Application.References.Remove Ref
End If
Next Ref

上記のコードは、Excelのライブラリの参照設定を解除します。

GUID等を調べる

Excelのライブラリ以外のライブラリのGUID等を調べるには、以下のコードをボタンのクリックイベントなどに設定して、表示させます。

Dim Ref As Reference
For Each Ref In References
Msgbox "Name:" + Ref.Name + "/ GUID:" + Ref.Guid
Next
Set Ref = Nothing

関連リンク

よく読まれている記事

UpDate:2010-1-13