Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


45722 / 76735 ←次へ | 前へ→

【35999】Re:ADOとCDO
回答  小僧  - 06/3/17(金) 16:54 -

引用なし
パスワード
   ▼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 については検証できませんでした。すみません。

0 hits

【35995】ADOとCDO tora 06/3/17(金) 15:42 質問
【35999】Re:ADOとCDO 小僧 06/3/17(金) 16:54 回答
【36052】Re:ADOとCDO tora 06/3/20(月) 10:21 お礼
【36003】Re:ADOとCDO inoue 06/3/17(金) 18:34 発言
【36063】Re:ADOとCDO 小僧 06/3/20(月) 12:45 発言

45722 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free