を終了したアプリケーションまでhungingバックグラウンドExcelのプロセスを残します:VBアプリケーションは、私がその役割にあるのVisual Studioで開発が非常に小型でシンプルなVBアプリケーションを持っている
- オープン(いくつかの計算式を含みます)Excelワークブック、
- INPUTセルにパラメータの値を入力します。
- 結果の値を事前定義されたセルから取得します。
Excelは、ヒューマンインタフェースなしで実行されます(つまり、Excel_Application.Visible = False
)。計算(および結果の取得)が終了すると
次のコマンドが実行される:
:
Excel_Workbook.Close(False)
Excel_Workbook = Nothing
Excel_Application.Quit()
Excel_Application = Nothing
:
Excelプロセスタスクマネージャを見るが示されている場合、これらのステートメントは、実行された後も。このプロセスは、アプリケーションの終了を要求されたときに削除されます(たとえば、ウィンドウの「X」ボタンをクリックします)。
グラフィカルインターフェイスを有効にすると、Excel_Application.Quit()
の後にタスクバーのアイコンが消えますが、バックグラウンドプロセスは残っています。
私は、アプリケーションを閉じることなくバックグラウンドプロセスを残す能力が必要です。
私はウェブを検索していくつかの提案を見つけましたが、どれもうまくいきませんでした。
実り多い提案をいただきありがとうございます。
たぶんこの記事は、httpsのを助けることができる:// stackoverflow.com/q/158706/1050927、トップ3(投票による)は役に立ちます – Prisoner
Excelはすべてのインタフェース参照が解放されるまで終了できません。それはあなたのvb.netアプリケーションが有用な仕事を続けているように、ガベージコレクタが動作するときに起こります。またはそれを閉じるとき。したがって、あなたのvb.netアプリケーションがもう役に立たないことはありません。はい、あなたもそれをやめるかもしれません。または強制する場合はGC.Collectを呼び出します。しかし、どこに置いても注意してください。このメソッドを呼び出すコードに入るか、デバッグするときにジョブを実行しません。 –
ありがとうございました@HansPassantあなたのコメントのために。私はいくつかの詳細を追加する必要があります...投稿されたコードは、最終的にDLLの一部となるクラスの一部です。 DLLは、ストアドプロシージャによって呼び出されるSQL SERVER関数にアセンブルされるため、呼び出し側のプロシージャからGCを呼び出すことはできません。つまり、すべてがDLL内で自己完結型でなければなりません。 1つの追加の観察:デバッグと手動ループの実行中に、Excelインスタンスが表示されますが、特定の時点で消滅しました(たとえば、7に達して8をトリガしたときに1つだけが残っていました)。 – FDavidov