のにっき

【VBA】ADOを利用したExcelアクセス時のエラー対応

Excelの解析にADOを利用したマクロを組んで配布したのですが、
私のPCではちゃんと動くのに、一部の方のPCでは動かない。。。
エラーの内容も三者三葉という気が狂うことがありました。
解決方法が結構斬新な物でしたのでご紹介します。

エラーが起きた環境

PC環境

・Windows10 64bit
Excel 2013 32bit

エラー発生ソース

Function GetFileRead_ADO(s_FilePath As String) As Variant
    ' 変数定義
    Dim strSQL As String
    Dim var_Ret() As Variant
    Dim dbCon As ADODB.Connection
    Dim dbRes As ADODB.Recordset
    ' ADO形式でシート内容取得
    Set dbCon = New ADODB.Connection
    dbCon.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                   "Data Source=" & s_FilePath & ";" & _
                   "Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1;Readonly=False"""
    strSQL = "SELECT * FROM [_ValueManage$]"

    ' 以下割愛・・・
End Function

上記ソースの「 dbCon.Open 」の部分でエラーになっていました。
エラーの内容はバラバラでしたが、エラー発生場所は共通でした。

エラー内容

・オートメーションエラー
・プロバイダーが見つかりません。正しくインストールされていない可能性があります。
・'Open'メソッドは失敗しました

エラー対応内容

CreateObjectを使用しない

参照設定を必要としなくなるのでとても便利なのですが、
ADO利用時にCreateObjectを使用するとエラーが一生直りませんでした。。。
こればっかりは原因が分かりませんでした。
以下は、「エラー発生ソース」のように
CreateObjectを使用しないソースを前提としています。

参照追加しているか確認

とりあえず参照設定を確認しましょう。
下図のチェック項目にチェックが入っているか確認!

f:id:apuridasuo:20200626144339p:plain
図:参照追加する項目

Accsessのインストール

これが驚きだったのですが、エラーの大きな原因が
Accsessがインストールされていない」でした!!
知らないよ!エラーで言え!!!と怒ったのはいい思い出です。
たまたま社内でOfficeのライセンス話があったので各人のインストール状況が
確認出来て「え!?」となって気づけたのですが、神ひらめきだったと自負してます。
という事で、社内に配布した簡単Access導入方法を紹介します。

f:id:apuridasuo:20200626145048p:plain
図:Access導入手順

Officeの修復

Accessの導入でほぼエラー問題は解決しました。
しかし、急にエラーが再発する方がちらほら。
原因は不明なのですが、解決方法は見つかりました。

www.saka-en.com

こちらのサイト様で紹介されている 「 Officeの修復をおこなう
の項目を実行すると、エラーは直りました。
エラーになった方々は直近にVisioをアンインストールした方々ばっかりでした。
おそらくですが、Officeのアプリは色々つながっていて、
一つのアプリをアンインストールすると別のアプリにも影響するのだと思います。

以上、
ADOを利用したExcelアクセス時のトラブルシューティングでした。

P.S.
オートメーションエラー考えたやつ滅びろ!
諦めずに原因教えなさいよ!!!