VBAの勉強を始めてみた

色々試しています。

参照設定を自動で行う

前回、参照設定の手間なくマクロを使う方法として、参照設定なしでインスタンスを生成する(CreateObject)方法について熱く語りましたが、今回はもう一つの方法である「参照設定を自動で行う」についても漏れなく勉強しておきたいと思います。

参照設定をマクロで追加する方法は2通りあります。例として、以下の外部オブジェクトをそれぞれの方法で参照設定してみましょう。
Microsoft Forms 2.0 Object Library
Microsoft ActiveX Data Objects 6.1 Library
Microsoft Scripting Runtime
Microsoft VBScript Regular Expressions 5.5

 

1.外部オブジェクトのファイル名(フルパス)で指定する方法です。 

References.AddFromFile("ファイルのフルパス") 

 

私のPC環境では次のようになります。
----------------------
Sub 参照設定をフルパスで追加()
'「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」にチェックを入れて下さい
'個人用マクロブック以外のアクティブブックを対象にします
    Dim myRef As Variant
    Set myRef = ActiveWorkbook.VBProject.References.AddFromFile("C:\Windows\SysWOW64\FM20.DLL")
    Set myRef = ActiveWorkbook.VBProject.References.AddFromFile("C:\Program Files (x86)\Common Files\System\ado\msado15.dll")
    Set myRef = ActiveWorkbook.VBProject.References.AddFromFile("C:\Windows\SysWOW64\scrrun.dll")
    Set myRef = ActiveWorkbook.VBProject.References.AddFromFile("C:\Windows\SysWOW64\vbscript.dll\3")
End Sub
----------------------

 

2.外部オブジェクトのGUIDで指定する方法です。

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

 

PC環境に依存せず次のようになります。
----------------------
Sub 参照設定をGUIDで追加()
'「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」にチェックを入れて下さい
'個人用マクロブック以外のアクティブブックを対象にします
    Dim myRef As Variant
    Set myRef = ActiveWorkbook.VBProject.References.AddFromGuid("{0D452EE1-E08F-101A-852E-02608C4D0BB4}", 2, 0)
    Set myRef = ActiveWorkbook.VBProject.References.AddFromGuid("{B691E011-1797-432E-907A-4D8C69339129}", 6, 1)
    Set myRef = ActiveWorkbook.VBProject.References.AddFromGuid("{420B2830-E718-11CF-893D-00A0C9054228}", 1, 0)
    Set myRef = ActiveWorkbook.VBProject.References.AddFromGuid("{3F4DACA7-160D-11D2-A8E9-00104B365C9F}", 5, 5)
End Sub
----------------------

 

どちらの方法でも、このように参照設定が自動で追加されていることが確認できます。(既に参照設定済みであればエラーになります)

f:id:kouten0430:20171021145717j:plain


注意点として、参照設定をマクロで操作する場合は、事前にマクロのセキュリティから「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」にチェックをつけておく必要があります。

f:id:kouten0430:20171021145805j:plain

f:id:kouten0430:20171021145829j:plain

 

最後に・・・フルパスで指定する場合はPC環境に依存しますが、GUIDで指定する場合はPC環境に依存しないので、配布用として作成する場合はGUIDのほうが確実な方法ではないかと思います。