11

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プロジェクトが再コンパイルされ、一時ファイルが削除されて再構築されます。また、同じ効果を持つはずのホストアプリケーションタイプライブラリのチェックサムを更新しようとしました。しかし、これらの修正はどれもうまくいかないようで、私はアイデアを使い果たしています。

4

1 に答える 1

2

何度か前にこの問題に遭遇しましたが、実際に推奨される (そして機能する) 解決策は、システム ドライブ上のすべての .exd ファイルを削除することでした。明らかに、それらは必要に応じて再構築されるため、再構築プロセスをプログラムでトリガーする必要はありません。

于 2011-07-11T12:20:40.660 に答える