質問
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でも問題なく動作しておりましたので、そのままで問題ないと判断しておりました。)