Access 2007+VBAで開発したファイルを久しぶりに実行したところ、on errorを使ったエラー処理が実行されました。
現象と対処法をメモしておきます。
現象
ADOを利用し内部クエリを実行するとCurrentProject.Connectionの行で
- 実行エラー’-2147221164(80040154)
- クラスが登録されていません
と表示される。
原因
原因はKB2459087に明記されていました。
原因を読むと、Access Connectivity Engine(ACE)のdll「ACEOLEDB.dll」のパスがレジストリに正しく登録されていないため!とのこと。
この現象は、Access 2007,2010,2013で発生するそうです。
本現象が発生した環境は
- Windows 7 64bit
- Access 2007 32bit
ですので、下記レジストリが実際に登録されているか調べてみた結果、残念ながらこのレジストリ情報は登録されていませんでした。
Key: HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{3BE786A0-0366-4F5C-9434-25CF162E475E}\InprocServer32\
Value Name: 規定
Value Data: C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE12\ACEOLEDB.DLL
対処法
対処法ですが、同現象の方々を参考に「Officeの修復機能」を使って改善しました。
修復の手順は
を参考にしてください。
修復完了後、マシンを再起動しレジストリをチェックしたところ、HKEY_CLASSES_ROOT配下に正しいレジストリ情報が登録されていました。
おかげさまでエラーが出たAccessファイルも正しい動作をしました。
今回の現象が起きたきっかけは全く分かりません。
半分開発&検証用マシンのため、あれやこれやを入れては試験しているので・・・
本当は開発用と検証用を分けるべきなんでしょうが予算の関係上そう簡単にはできませんのね~ふぅ