12

私のExcelアドイン(XLL AddIn、それを呼び出しますMyAddIn)は、C#、ExcelDNA、NetOffice、VS2010で構築されています。クライアントには別のアドインがあります(これを呼びましょうB)。VBAで記述されていると思います。クライアントはB、がなくても正常に動作すると言いMyAddInます。インストールすると、次のエラーMyAddInB失敗します。

エラーコード:406エラーメッセージ:このホストアプリケーションでは、ActiveX DLL、ActiveXコントロール、またはプロパティページから非モーダルフォームを表示できません。

私はこのMicrosoftリソースBを見ましたが、アドインを変更する必要があることをクライアントに伝えたくありません。私の側からこれを避けるために何かをしたいです。

問題を確認するために報告された手順は次のとおりです。

  1. Bアドインをインストールすると、Microsoftのレジストリエントリは作成されませんExcel
  2. MyAddinをインストールすると、Microsoftのレジストリエントリが作成されますExcel
  3. Excelここのレジストリエントリは、基本的に、起動時にアドインを開く必要があることを示しているため、Bアドインは起動されず、正常に動作し、Excel正常にMyAddIn動作します。
  4. これで、Bアドインを起動すると、上記の406エラーが発生します。
  5. エラーを無視して、Bアドインで作業を続けることができます。無効にすることMyAddInは回避策です。
  6. Bアドインを起動すると、アドインの前に最初にロードされ、次に406エラーが発生することがMyAddInわかりBます。
  7. アンインストールするMyAddInと、このエラーは発生しなくなり、すべてが正常に機能します。
  8. このエラーを取り除くために、レジストリの順序を変更して、Bアドインが常に開くようにしMyAddinました。
    • これは機能しますがExcel、これはMicrosoftのグローバルな変更です。つまりB、を起動した場合でも、アドインは常に開きExcelます。アドインはリアルタイムで更新を続けるBため、アドインは静的データを操作できないため、これは望ましくありません。これが、アドインがレジストリ設定にエントリを作成しないB理由です。Bしたがって、レジストリの変更はオプションではありません。B開いているときはいつでもアドインを開くことができるとは限りませんExcel
4

1 に答える 1

1

答えはありませんが、いくつか試してみてください。

ファイル |を実行することで、扱っているアドインの種類を知ることができます。オプションと [アドイン] タブの選択。

をロードするとすぐにイベントが発生する場合はAddin B、それが示すように非モーダル ダイアログ ボックスを呼び出していることを意味している可能性がありますが、同様のエラーが発生する原因は他にもいくつかあります。

あなたの説明に基づいて、エラーはアドインのダイアログボックスであるか、他のアドインである可能性があり、アドインが行った状態変更の副作用として呼び出されます。

その根底にたどり着くには、デバッガーをアタッチする必要があります。これを行うには、Excel をスタートアップ プロジェクトにするか、後でアタッチします。この場合、おそらく前者の方が簡単です。

  1. Visual Studio では、Project |を使用します。プロパティ | Debug 、 Start external programを選択し、Excel への完全修飾パス名を入力します。

  2. Addin B手動でロードしてエラーを自分に与える

  3. デバッガーを中断し、コール スタックを調べます。

問題がどこにあるかについての良い手がかりが得られるとは限りませんが、それは常に最初のステップです。有用な情報が得られない場合 (アドイン間の遷移でスタック情報が完全に失われることがよくあります)、処理するイベントのプロジェクトにいくつかのブレークポイントを配置することをお勧めします。これでも常に確実に機能するとは限りませんが、試してみる価値はあります。

推測する必要がある場合は、問題の原因となっているイベント ハンドラーがアドインに含まれている可能性があります。また、.Showa を `.ShowDialog' に変更するか、フォームの処理を延期する必要があるかもしれません。イベントハンドラーの外側ですが、それは単なる推測です。

于 2014-05-12T15:13:13.637 に答える