Microsoft Office2007をOffice2010に更新した後、ソフトウェアに埋め込まれている一部のカスタムVBAスクリプトがコンパイルに失敗し、次のエラーメッセージが表示されました。
オブジェクトライブラリが無効であるか、見つからなかったオブジェクト定義への参照が含まれています。
私の知る限り、このエラーはMicrosoftからのセキュリティ更新プログラム(Microsoft Security Advisory 960715)の結果です。ActiveXコントロールをVBAスクリプトに追加すると、コントロールに関する情報がローカルハードドライブのキャッシュファイル(.exd-files)に保存されます。セキュリティアップデートにより、これらのコントロールの一部が変更されましたが、.exdファイルは自動的に更新されませんでした。VBAスクリプトが、キャッシュされたファイルに保存されている古いバージョンのコントロールを読み込もうとすると、エラーが発生します。コントロールを正常にロードするには、これらのキャッシュファイルをハードドライブから削除する必要があります(これにより、新しい更新された.exdファイルが自動的に作成されます)。
私がやりたいのは、ソフトウェアのロード時にプログラムで(Visual C ++を使用して)古い.exdファイルを削除することです。を使用してVBAプロジェクトを開くときCApcProject::ApcProject.Open
は、次のフラグを設定しますaxProjectThrowAwayCompiledState
。
TestHR(ApcProject.Open(pHost, (MSAPC::AxProjectFlag) (MSAPC::axProjectNormal | MSAPC::axProjectThrowAwayCompiledState)));
ドキュメントによると、このフラグにより、VBAプロジェクトが再コンパイルされ、一時ファイルが削除されて再構築されます。また、同じ効果を持つはずのホストアプリケーションタイプライブラリのチェックサムを更新しようとしました。しかし、これらの修正はどれもうまくいかないようで、私はアイデアを使い果たしています。