7
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Access】GUIDを使用してVBAから参照設定を行う

Posted at

Accessで開発したツールを配布したら相手と自分のオフィスのバージョンが異なり、
起動時に参照設定のエラーが出ちゃうっていう
Access開発でまれによくあるやつの対処。

使用者のPCごとに毎回手動で参照設定を変えるのは面倒なので
VBAでバージョン判定して参照設定を。

参照設定をVBAから行う方法は2つ。

  • ライブラリのフルパスを指定(AddFromFile)
  • GUIDを指定(AddFromGuid)

フルパスを指定する方法は複数人に配布するには不向きなので、
今回はGUIDを指定して設定する方法。

GUIDを調べる

必要な情報はGUIDとそのバージョン(メジャー&マイナー)。
ついでにオフィスのバージョンも確認。

Sub survey_guid()

    Dim Ref As Reference

    Debug.Print "VERSION:" & Application.Version
    
    For Each Ref In References
        Debug.Print "NAME:" & Ref.Name & " GUID:" & Ref.Guid & " MAJOR:" & Ref.Major & " MINOR:" & Ref.Minor
    Next
    
    Set Ref = Nothing

End Sub

結果
GUID.JPG

実際の参照設定と見比べるとこんな感じ。
reference.JPG
参照設定のウィンドウと同じ順番で出力されている。
(英語OSに日本語Officeをインストールしている関係で一部文字化けしています。)

今回VBAで参照設定したいのはADO Ext.XX とExcel object Library。
2つの画面から各ライブラリのGUIDとそのメジャーバージョン・マイナーバージョンが特定できる。

ADO
NAME:ADOX GUID:{00000600-0000-0010-8000-00AA006D2EA4} MAJOR:6 MINOR:0

Excel object Library
NAME:Excel GUID:{00020813-0000-0000-C000-000000000046} MAJOR:1 MINOR:7

画面と結果はOffice2010。

使用される可能性のあるOfficeのバージョンでそれぞれ同様の調査をする。

参照設定

上記で取得したGUIDとバージョンを使用して参照設定。
今回はAccess起動時に開くフォームのForm_Loadイベントに記載し、
office2010と2007の利用者がいる場合を想定。

Private Sub Form_Load()
    Dim Ref As Reference
    Const strADO As String = "{00000600-0000-0010-8000-00AA006D2EA4}"
    Const strExcel As String = "{00020813-0000-0000-C000-000000000046}"
    
    On Error Resume Next
    
    If Application.Version = 14# Then
        Set Ref = References.AddFromGuid(strADO, 6, 0)
        Set Ref = References.AddFromGuid(strExcel, 1, 7)
    ElseIf Application.Version = 12# Then
        Set Ref = References.AddFromGuid(strADO, 2, 8)
        Set Ref = References.AddFromGuid(strExcel, 1, 6)
    End If
    
    Set Ref = Nothing

End Sub

オフィスのバージョンを取得しバージョンごとに条件分岐、

References.AddFromGuid("GUID", メジャーバージョン, マイナーバージョン)

これで各ライブラリの参照設定をする。

エラー処理は手抜き。
すでに参照設定されている場合にはエラーNo.32813が返ってくるので、必要に合わせてエラー処理を。
(参照設定は保存されるので、エラー32813に対して何らかのエラー処理
をしておかないと、2回目以降に起動した際エラーが発生する。)
(上記同様の理由で配布時には一度参照設定を外してから配布することを忘れずに。)

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

※もっとスマートな方法ご存知の方いれば教えてください。

7
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?