2016-05-16 5 views
0

私は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); 

     } 
    } 
+1

アプリケーションが作成するブックのリストを保存しておき、それらのブックを閉じるだけで "終了"することができます。最後のワークブックが閉じてExcelに残りのワークブックが残っている場合は、Excelを閉じます。そうでなければ、手動ワークブックを開いたままにしておきます。 –

+0

それは素晴らしい考えです。あなたがあなたのコメントを回答に変えたら、それを受け入れます。ありがとうございました。 – DDuffy

+0

完了 - それが気に入ってうれしい - 私にとってはエレガントな解決策のようでした。 –

答えて

1

その後、持っている、あなたのアプリケーションが作成したワークブックのリストを保持しますあなたの「出口」はそれらのワークブックを閉じます。最後のワークブックが閉じてExcelに残りのワークブックが残っている場合は、Excelを閉じます。そうでなければ、手動ワークブックを開いたままにしておきます。

+0

そのような単純な解決策、私はなぜ私は自分自身を考えなかったのか分からない。ありがとうございました。 – DDuffy

+0

トーチを照らすために他の人が必要な場合もあります。あなたのプロジェクトに幸運を祈る! :) –

関連する問題