私はExcelで頻繁に動作するプログラムを書いています。私は私の終了コマンドを実行するときにかかったようだ。それが作成したExcelのすべてのインスタンスを閉じるだけでなく、何かがぶら下がった場合のポイントでしたが、プログラムを使用して手動で開いたExcelのインスタンスもすべて終了します。Excelの別のインスタンスを閉じないでシャットダウンプログラム
誰かが私がこれに間違っていると指摘することはできますか?
(また、私は任意の「共通」のミスを言い訳してください、その場でのC#を勉強しています。すべての建設的な批判は大歓迎です。)
private void BtnExit_Click_1(object sender, EventArgs e)
{
try
{
if (ObjApp == null)
{
Excel.Application ObjApp = new Excel.Application();
}
Modules.MessageUpdate(this, ObjApp, EH, 5, 22, "", "", "", 0, 0, 0, 0, "Application Quit.", "N");
ObjApp.Quit();
if (ObjApp != null)
{
ObjApp = null;
}
if (UC != null)
{
UC = null;
}
if (Zoho != null)
{
Zoho = null;
}
if (Modules != null)
{
Modules = null;
}
if (EH != null)
{
EH = null;
}
if (proc != null)
{
proc = null;
}
if (Wait != null)
{
Wait.Close();
Wait = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
Environment.Exit(0);
}
catch(COMException)
{
//System.Windows.Forms.Application.Restart();
if (ObjApp != null)
{
ObjApp = null;
}
if (UC != null)
{
UC = null;
}
if (Zoho != null)
{
Zoho = null;
}
if (Modules != null)
{
Modules = null;
}
if (EH != null)
{
EH = null;
}
if (proc != null)
{
proc = null;
}
if (Wait != null)
{
Wait.Close();
Wait = null;
}
//ObjApp.Quit();
GC.Collect();
GC.WaitForPendingFinalizers();
Environment.Exit(0);
}
catch
{
if (ObjApp != null)
{
ObjApp = null;
}
if (UC != null)
{
UC = null;
}
if (Zoho != null)
{
Zoho = null;
}
if (Modules != null)
{
Modules = null;
}
if (EH != null)
{
EH = null;
}
if (proc != null)
{
proc = null;
}
if (Wait != null)
{
Wait.Close();
Wait = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
Environment.Exit(0);
}
}
アプリケーションが作成するブックのリストを保存しておき、それらのブックを閉じるだけで "終了"することができます。最後のワークブックが閉じてExcelに残りのワークブックが残っている場合は、Excelを閉じます。そうでなければ、手動ワークブックを開いたままにしておきます。 –
それは素晴らしい考えです。あなたがあなたのコメントを回答に変えたら、それを受け入れます。ありがとうございました。 – DDuffy
完了 - それが気に入ってうれしい - 私にとってはエレガントな解決策のようでした。 –