| 
    
     |  | ▼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 については検証できませんでした。すみません。
 
 |  |