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

  • 質問

  • お世話になります。

    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'オブジェクト

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

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

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

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

    2019年1月5日 6:02

すべての返信

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

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

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

    インストールされていても 32/64-bit 不整合の問題があるとか? VBA というのは全然知りませんが VB6 のように 32-bit 版しかないとか? とすると、ACE も 32-bit 版でないと動かないはずです。
    2019年1月5日 8:38
  • ご回答ありがとうございます。

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

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

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

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

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


    • 編集済み YMTKC 2019年1月7日 1:47
    2019年1月7日 1:47
  • > 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日 2:31
  • 引き続きお付き合い頂きありがとうございます。

    調べていて分かったこととして、現象が発生する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でも問題なく動作しておりましたので、そのままで問題ないと判断しておりました。)

    2019年1月7日 4:33