【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を使用しないソースを前提としています。
参照追加しているか確認
とりあえず参照設定を確認しましょう。
下図のチェック項目にチェックが入っているか確認!
Accsessのインストール
これが驚きだったのですが、エラーの大きな原因が
「Accsessがインストールされていない」でした!!
知らないよ!エラーで言え!!!と怒ったのはいい思い出です。
たまたま社内でOfficeのライセンス話があったので各人のインストール状況が
確認出来て「え!?」となって気づけたのですが、神ひらめきだったと自負してます。
という事で、社内に配布した簡単Access導入方法を紹介します。
Officeの修復
Accessの導入でほぼエラー問題は解決しました。
しかし、急にエラーが再発する方がちらほら。
原因は不明なのですが、解決方法は見つかりました。
こちらのサイト様で紹介されている
「 Officeの修復をおこなう 」
の項目を実行すると、エラーは直りました。
エラーになった方々は直近にVisioをアンインストールした方々ばっかりでした。
おそらくですが、Officeのアプリは色々つながっていて、
一つのアプリをアンインストールすると別のアプリにも影響するのだと思います。
以上、
ADOを利用したExcelアクセス時のトラブルシューティングでした。
P.S.
オートメーションエラー考えたやつ滅びろ!
諦めずに原因教えなさいよ!!!