|
▼tora さん:
こんにちは。
Excel からですと Referenceオブジェクト の上位オブジェクトが変わってくる模様ですね。
Sub ADOの参照設定()
Dim Refs As Object
Dim ADOGUID As String
Dim i As Long
Const Majo = 2
Const Mino = 1
ADOGUID = "{00000201-0000-0010-8000-00AA006D2EA4}"
Set Refs = Application.VBE.ActiveVBProject.References
For i = Refs.Count To 1 Step -1
If Refs(i).IsBroken Then
Application.VBE.ActiveVBProject.References.Remove Refs(i)
Else
If Refs(i).Name = "ADODB" Then _
Application.VBE.ActiveVBProject.References.Remove Refs(i)
End If
Next
Set Refs = Nothing
On Error Resume Next
Application.VBE.ActiveVBProject.References.AddFromGuid ADOGUID, Majo, Mino
Select Case Err.Number
Case 0
Case -2147319779
MsgBox "ADO2.1のライブラリが見つかりませんでした。"
Case Else
MsgBox Err.Description
End Select
End Sub
このプロシジャを ThisWorkbook の Workbook_Open イベントから呼び出してみてください。
上記コードなのですが、幾つか問題点があります。
DAO や Excel と違い、ADODB のバージョンの相違は
Majorプロパティ、Minorプロパティだけでなく、GUIDそのものが変化してきます。
(例)
ADODB2.5:{00000205-0000-0010-8000-00AA006D2EA4}
ADODB2.6:{00000206-0000-0010-8000-00AA006D2EA4}
ADODB2.7:{EF53050B-882E-4776-B643-EDA472E8E3F2}
そこで、既に ADODBが参照設定されていた場合
If Refs(i).Name = "ADODB" Then
と判断させていますが、ライブラリの種類によっては Nameプロパティが
ないものがあった(気がした)ため、ここの行でエラーが起きる可能性があります。
考えられる全ての ADODB の GUID をチェックした方がより安定したコードが組めると思われます。
また当方の環境では
>Microsoft CDO for Wndows 2000 Librry
が存在しないため、CDO については検証できませんでした。すみません。
|
|