Excel VBA質問箱 IV

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

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


7922 / 13645 ツリー ←次へ | 前へ→

【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 発言[未読]

【35995】ADOとCDO
質問  tora  - 06/3/17(金) 15:42 -

引用なし
パスワード
   WEBでエクセルを開きアクセスのDBを使っているのですが
下記2項目の参照設定を自動で行いたいのですが
どのようにしたらいいでしょうか
MicrosoftのActiveXObjects Library(2.1)
Microsoft CDO for Wndows 2000 Librry 
DAOのサンプルがあったのでいれてみましたが
As Referencesでユーザー定義型は定義されません。
のエラーになります。
アクセスのVBAにはReferencesはあるようですが
エクセルVBAにはないのでしょうか。

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

【36003】Re:ADOとCDO
発言  inoue E-MAILWEB  - 06/3/17(金) 18:34 -

引用なし
パスワード
   ▼tora さん:
>WEBでエクセルを開きアクセスのDBを使っているのですが
>下記2項目の参照設定を自動で行いたいのですが
>どのようにしたらいいでしょうか
ADOについてはバージョンがまちまちなので、
参照設定より実行時バインドされた方が良いかも知れません。
CDOはそうではないと思いますがWindows2000以降に限定されます。

参照設定、実行時バインド、どちらもサンプルがあります。
[ADO]
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_030.html
[CDO]
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html

なお、ADOのバージョンは「MDAC」に左右されます。
現状では「MDAC2.8SP1」でしょうか。
[ダウンロードセンター/ドライバ]
http://thesource.ofallevil.com/downloads/Browse.aspx?displaylang=ja&categoryid=3

【36052】Re:ADOとCDO
お礼  tora  - 06/3/20(月) 10:21 -

引用なし
パスワード
   ありがとうございました。うまくいきました。
大変たすかりました。
ちなみにですが、
1)VisualBasic For Applicaion も参照可能でしょうか。
  STR関数でエラーが発生するマシーンが見つかったので。
  
2)このようなロジックをコーデングするのに参考になるURLありましたらお教えください.

【36063】Re:ADOとCDO
発言  小僧  - 06/3/20(月) 12:45 -

引用なし
パスワード
   ▼tora さん、inoue さん:
こんにちは。

>1)VisualBasic For Applicaion も参照可能でしょうか。

可能だと思います。
参照設定が可能なライブラリについては個々の端末にインストールされている
OS や Application の有無、バージョンに依存されます。
「VisualBasic For Applicaion」を参照設定するにあたって
OS や Excel のバージョンの違いによって
参照設定に影響があるのかどうかを検証する必要が出てきますね。


>2)このようなロジックをコーデングするのに参考になるURLありましたらお教えください.

「このような」というのが何を指すのかが不明瞭ですが、
参照設定を VBA から行う、という事でしたら
「References.AddFromGuid」等でWeb検索をされてみて下さい。
当方もコードを作成するにあたり Web検索を色々としてみたのですが、
詳細な情報を得ようとするとどうしても海外のサイトになってしまいました。

日本語のサイトで「ここを見れば一発で解りますよ」というような所は
残念ながら見つかりませんでした。


参照設定を VBAから制御する事は可能か、という問題に関しては
「可能な場合もある」(条件によっては駄目かも…)としか言えません。

inoue さんからご提示された回答の中にもありますが、
本来は実行時バインディングを使ってコードを書くのが正攻法だと思われます。

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