C# WinForms アプリケーション内から Excel を起動しますProcess.Start(...)
(これには理由があります)。ユーザーの気を散らすことなくバックグラウンドで起動したいので、最小化または非表示で起動しようとしています。どちらの場合も、非常に奇妙な動作が発生します。
数秒後、Excel はウィンドウを復元し (非表示の場合でも表示します)、「Microsoft Office Excel で問題が発生したため、閉じる必要があります。(Win XP のクラッシュ メッセージ)」と言ってクラッシュします。
デスクトップのショートカット アイコンをダブルクリックして Excel を手動で起動し、すぐに別のアプリケーション ウィンドウに切り替えた場合も同じことが起こり、Excel ウィンドウが起動時にフォーカスを失います。
この問題は、 XLA アドインに UserForm が含まれている場合にのみ発生します。UserForm を削除すると、問題はなくなります。アドインを削除すると、問題はなくなります。
それがそうである限り、どんな助けも大歓迎です
- これが起こる理由の説明
- アドインで変更できるもの
- このバグを回避する方法(COM を使用しない場合)
- COM の使用を推奨するものではありません。(私がそうしない理由を理解するには、こちらを参照してください。)
- Excelを更新するためのアドバイスではありません(できません)
再現する手順:
- 空のブックで Excel 2007 を起動します。
- 名前を付けて保存...
- ファイルの種類: Excel 2003 アドイン (*.xla)
- 場所: %APPDATA%\Microsoft\Excel\XLSTART\foobar.xla
- Alt + F11 (VBA エディターを開く)
- プロジェクトにユーザー フォームを追加します。
Excel を保存して終了する
Excel を起動し、すぐに Firefox またはタスクバーの任意のタブをクリックして、Excel 以外のウィンドウをアクティブにします。
- クラッシュするまで、Excel が起動するのを待ちます。
Excelを再起動すると、次のように表示されます。
Excel の 'foobar' アドインで深刻な問題が発生しました。このメッセージが何度も表示される場合は、このアドインを無効にして、更新が利用可能かどうかを確認してください。このアドインを無効にしますか?
詳細/調査結果:
- Excel バージョン: 12.0.6535.5002、SP2 MSO 12.0.6425.1000
- 0xA3 はコメントで、Excel 12.0.6535.5002、SP2 MSO 12.0.6535.5002 を搭載した 32 ビット マシンで再現できると報告しました。
- 2007 アドイン (XLAM) を試してみました。ユーザーフォームが含まれていない場合でもクラッシュすることを除いて、同じ問題。
- 0xA3 は、彼の 64 ビット マシンで動作したと報告しましたが、それでも Excel が予期せずポップアップします (クラッシュはしません)。これまでのところ、私のテスターの2台のマシンにも同じことが当てはまります。
これは、私が C# で使用したかったコードです (問題は、C# アプリとは完全に独立して再現できることに注意してください。上記を参照してください)。
Process.Start(new ProcessStartInfo("excel.exe")
{ WindowStyle = ProcessWindowStyle.Minimized });