次の方法で共有


ADODB.ConnectionのOpenでエラーが出てしまう

質問

2019年1月5日土曜日 6:02

お世話になります。

xlsmファイルを特定の端末で開いた場合に下記のようなエラーが発生してしまいます。

※別の端末で同一バージョンのExcel(2013)を使用してみたところ、現象が再現されませんでした。

'テスト用メソッド

Private Sub test_Click()
    Dim TargetFilePath

    TargetFilePath = ThisWorkbook.FullName

    Dim cn       As Object
    Dim rs       As Object

    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    cn.Provider = "Microsoft.ACE.OLEDB.12.0"
    cn.Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"
    cn.Open TargetFilePath

    cn.Close
End Sub

「cn.Open TargetFilePath」の部分で実行エラーが発生してしまいます。

【エラーメッセージ内容】

実行時エラー'-2147417848(800101'08):
'Open'メソッドは失敗しました:'_Connection'オブジェクト

他の環境では動作するということは、コードの問題ではないことも疑われると思いますが、

どのように問題点を切り分ければ良いでしょうか。

同様の経験お持ちの方や、原因をご存知の方が居られましたらご教唆頂きたく、

どうぞよろしくお願いいたします。

すべての返信 (4)

2019年1月5日土曜日 8:38

> cn.Provider = "Microsoft.ACE.OLEDB.12.0"

ACE プロバイダの問題ではないのですか?

問題が出る方の環境では ACE プロバイダがインストールされていないとか、

インストールされていても 32/64-bit 不整合の問題があるとか? VBA というのは全然知りませんが VB6 のように 32-bit 版しかないとか? とすると、ACE も 32-bit 版でないと動かないはずです。


2019年1月7日月曜日 1:47

ご回答ありがとうございます。

ご指摘いただいました点を踏まえて再度調べてみたところ、

64bitで実行した場合にのみ発生していたようです。

また、ACEはインストールはされていましたが32bit版でした。

Excelが64bitで実行しているにも関わらずプロバイダが32bitなので、このような現象が起きているのでしょうか。

もう少し色々試してみます。


2019年1月7日月曜日 2:31

> 64bitで実行した場合にのみ発生していたようです。
> また、ACEはインストールはされていましたが32bit版でした。
> Excelが64bitで実行しているにも関わらずプロバイダが32bitなので、このような現象が起きているのでしょうか。

自分は VBA は分からないのですが、たぶん、以下の記事の[Step 4. DLL ファイルのロードメカニズム]のセクションの図の×印のように、64-bit OS 上で 64-bit exe(それが VBA アプリ?)を動かして、アプリから 32-bit DLL(32-bit 版 ACE)を使おうとして Open の個所でクラッシュしたのだと思います。

Part 1. 64 ビット Windows OS の基本知識
https://blogs.msdn.microsoft.com/nakama/2008/10/30/part-1-64-windows-os/

Office はどのようにインストールしたのでしょうか? 普通にインストールすると ACE プロバイダも一緒にインストールされ、その 32/64-bit は Office と同じになると理解していたのですが。

ただ、最近知ったのですが「クイック実行形式」の場合は ACE プロバイダはインストールされないそうですが・・・

クイック実行形式の Office をインストールすると ODBC / OLEDB が利用できない
https://blogs.technet.microsoft.com/officesupportjp/2016/09/06/not_available_access_odbc_oledb_outside_c2r_applications/

なお、32-bit 版の ACE と 64-bit 版の ACE は同じ PC で共存できないそうですので注意してください(共存させる裏技的な方法はあるそうですが、それで質問者さんの VBA アプリが期待通り動くかどうかは分かりません)。

【追伸】

今頃気づいて何ですが・・・

> cn.Provider = "Microsoft.ACE.OLEDB.12.0"

そのバージョン 12.0 からすると、Office 2007 用ですよね。それには 32-bit 版しかない(64-bit 版は無い)はずです。

Office のバージョンは 2013 のようですが、ACE が 2007 用ということは、何か普通でないことをしているのですか?


2019年1月7日月曜日 4:33

引き続きお付き合い頂きありがとうございます。

調べていて分かったこととして、現象が発生するPCにはOffice2013(Word,Excel,Outlook)とOffice2007(Access,Powerpoint)の両方がインストールされていました。

結果、SurferOnWwwさんのご推察通り、64bitのExcelから既にインストールされている32bitのACEプロバイダを使おうとしているようになっている、と推察されます。64bit版のインストールを試みましたが、ご指摘いただいている通り、既に32bit版がインストールされているためにインストールできません。

>なお、32-bit 版の ACE と 64-bit 版の ACE は同じ PC で共存できないそうですので注意してください(共存させる裏技>的な方法はあるそうですが、それで質問者さんの VBA アプリが期待通り動くかどうかは分かりません)。

32bitのACEプロバイダをアンインストールし、64bit版をインストールして試してみようと思います。

>そのバージョン 12.0 からすると、Office 2007 用ですよね。それには 32-bit 版しかない(64-bit 版は無い)はずです。
>Office のバージョンは 2013 のようですが、ACE が 2007 用ということは、何か普通でないことをしているのですか?

問題となっているxlsmファイルは元々Office2007で作られたもので、2010→2013→2016とOfficeが新しくなっても、そのまま使い続けているものなので、そのような記述になっています。
(現時点でも複数のバージョンのEXCELでそのファイルを使用しており、2013でも2016でも問題なく動作しておりましたので、そのままで問題ないと判断しておりました。)