プロが教えるわが家の防犯対策術!

VBAによる参照設定について教えてください。
以前にOffice2010と2003の互換性の問題について教えていただいた際に、以下のようなやり方を教えていただき、AccessのVBAでExcelの参照設定はできたのですが、ExcelのVBAでAccessの参照設定をしようとした際に「Dim Ref As Reference」の部分が「ユーザー定義型は定義されていません」となってしまいコンパイルできません。Accessの参照設定にチェックを入れると問題ないので、Excelに「Reference」というデータ型が使えないのだと思うのですが、Excelではどのように書いたらよいのでしょうか?

On Error GoTo Err_Rise

Dim Ref As Reference

Const strGUID As String = "{00020813-0000-0000-C000-000000000046}" 'Excelの参照設定をする場合
Const strGUID As String = "{4AFFC9A0-5F99-101B-AF4E-00AA003F0F07}" 'Accessの参照設定をする場合

Set Ref = References.AddFromGuid(strGUID, 1, 3)
Set Ref = Nothing

Err_Rise:
If Err.Number = 32813 Then
Resume Next
End If
On Error GoTo 0

A 回答 (2件)

すこしだけ判ったっぽいかも。



テスト条件
Excel2010

参照設定
Visual Basic for Applications
MIcrosoft Excel 14.0 Object Library
OLE Automation
Microsoft Visual Basic for Applications Extensibirity 5.3
Microsoft Office 14.0 Object Library
(Access にはまだ入れていません)

Excelの設定
ファイル→オプション→セキュリティセンター→マクロの設定から
VBA プロジェクト オブジェクト モデルへのアクセスを信頼する
にチェックを入れて置きます。

Sub refList()
  '要参照設定 Microsoft Visual Basic for Application Extensibility x.x
  Dim ref As Reference
  For Each ref In Application.VBE.ActiveVBProject.References
    Debug.Print ref.Name
    Debug.Print ref.GUID
    Debug.Print ref.Major
    Debug.Print ref.Minor
    Debug.Print "--------------"
  Next
  Set ref = Nothing
End Sub
これでイミディエイトウィンドウに設定のリストが出力されます。
Microsoft Access14.0 Object Library に参照設定のチェックを入れて
行うと
Access
{4AFFC9A0-5F99-101B-AF4E-00AA003F0F07}
9
0
が得られますので
Sub refSet()
  Dim ref As Reference
  With Application.VBE.ActiveVBProject.References
  Set ref = .AddFromGuid("{4AFFC9A0-5F99-101B-AF4E-00AA003F0F07}", 9, 0)
  Set ref = Nothing
  End With
End Sub
のような事をするとAccessに参照設定できました。
Reference オブジェクトは、AccessにもありますのでVBE?を指定してあげないと
うまく行かないようです。(ちょっと怪しい解説)

少し思うのは、参照設定をVBAで自動的に行うよりも
参照設定を行っておいて開発し、出来上がったら参照設定を外して
CreateObject("Access.Application") で実行時バインディングにして
細々とした修正を行った方が良いように感じます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご指摘の通りにしてみたところ、うまくいきました。ありがとうございます。

自分も最初は参照設定を外しても動くように修正していたのですが、作成したファイルや変数が多すぎて途中で挫折してしまいました。
新たに作成するものは参照設定しなくてもいいように作ってみたいと思います。
ありがとうございました。

お礼日時:2012/08/22 11:26

Excelの参照設定に



Microsoft Visual Basic for Application Extensibility x.x

がありますのでチェックを入れてみてください。
x.x はバージョンによって異なります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご指摘の通りにしてみると、コンパイルエラーはなくなりました。しかし、実行してみると参照設定は追加されていませんでした。
エラーを確認すると、「オブジェクトが必要です」となっていました。
Set Ref = References.AddFromGuid(strGUID, 1, 3)
の部分だと思うのですが、どのようにしたらよいのでしょうか?

お礼日時:2012/08/17 17:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!