1

これは、ExcelワークシートまたはグラフがWordまたはPowerpointに埋め込まれている場合に非常に一般的な問題です。WordとPowerpointの両方でこの問題が発生しており、Excelに接続されているCOMアドインが原因であると思われます。COMアドインは、C#(.NET)で記述されています。エラーダイアログについては、添付の画像を参照してください。

アドインをデバッグしたところ、非常に奇妙な動作が見つかりました。COMアドインのOnConnection(...)、OnDisConnection(...)などのメソッドは、コードにイベントハンドラーを追加するまで正常に機能します。つまり、Worksheet_SheetChange、SelectionChange、またはExcelで使用可能な同様のイベントを処理します。イベントハンドラーを1つでも追加すると(コードには複数ありますが)、WordとPowerpointは文句を言い始め、埋め込みオブジェクトをアクティブ化しません。

インターネット上のいくつかの投稿では、オフィス用のアンチウイルスアドインを削除するように求められているため(私の場合はなし)、この問題は、ホストアプリがアクティブ化されたときに読み込まれるCOMアドインに関連していると思われます。オブジェクト。

ここで何が起こっているのか誰かが知っていますか?PowerPointエラー

ワードエラー

2010年6月21日更新


イベントとComAddInsコレクションへの変更の両方が、埋め込みオブジェクトがアクティブ化されたときに問題を引き起こすことがわかりました。これで、Excel :: Application :: UserControlプロパティを使用して、Excelが埋め込み状態にあるかどうかを確認し、OnConnection(...)およびOnDisconnection(...)コードをスキップしました。

イベントの問題に対する1つの解決策は、すべてのアプリケーションレベルのイベントをVBAコードに移動し、.NETを呼び出すことです。これにより、.NETコードからすべてのイベントハンドラーが削除されます。

埋め込みオブジェクトが初期化に失敗する可能性があるシナリオがさらにある可能性があるため、COMアドインを無効にすることを選択します。つまり、OnConnection(...)メソッドとOnDisconnection(...)メソッドのコードを完全にスキップします。

4

1 に答える 1

0

この厄介な問題を取り除くために私がしたことは次のとおりです。

  1. .NETコード内のすべてのイベントハンドラーを削除し、VBAアプリケーションイベントに依存します。つまり、Excel :: Application :: Worksheet_Activate(...)イベントを処理する代わりに、VBAモジュールでそれらを処理し、イベントが受信されたときにアドインを呼び出します。 。.NETイベントハンドラーは、何らかの形で状態を破壊しているようです。

  2. カスタムパラメータのフラグを使用して、OnConnection(...)のアドインと対話するコードを無効にします。フラグの詳細については、次のリンクを参照してください 。COMアドインの詳細

Excel :: Application :: UserControlプロパティについて説明しましたが、信頼できない場合があります。次の場合を考慮する必要があります。カスタム配列パラメータはOnConnection(...)が最も信頼性が高いです。

  1. Excelは独立したアプリケーションとして始まりました
  2. Excelは他のアプリケーションに埋め込まれたアプリとして開始されました
  3. Excelは自動化によって開始されました(例:CreateObject(...))

Excelが埋め込みモードの場合は、アドインを完全に無効にすることをお勧めします。これは、OnConnection(...)で実行しているコードと、実行時に他のアプリケーションがそれにどのように応答するかによって異なります。この問題を解決するには、ポイント#1を実装する必要があります。

誰かがこれに対するより良い解決策を持っているなら、私に知らせてください:)

于 2010-08-30T12:13:07.743 に答える