C# 経由で VBA/Excel マクロを呼び出すことができます。ユーザー (私の場合は C# プログラム) が無効な値を入力すると、メッセージ ボックスが表示されます。これは問題ありません。C# を介してタイムアウトし、それに基づいて決定を下す (つまり、メッセージ ボックスが表示されるかどうかを決定する) ことができるからです。問題は、メッセージ ボックスが表示されたときに Excel が正しく閉じないことです。このコードを使用してExcelを閉じています:
excelApp.DisplayAlerts = false;
Marshal.FinalReleaseComObject(someSheet);
excelWorkbook.Close(Type.Missing, Type.Missing, Type.Missing);
Marshal.FinalReleaseComObject(excelWorkbook);
GC.Collect();
GC.WaitForPendingFinalizers();
すべてが閉じますが、Excel とメッセージ ボックスは開いたままです。C# からメッセージ ボックスを閉じる方法はありますか?