web-dev-qa-db-ja.com

「Application.Quit」はExcelをバックグラウンドで実行したままにします

スケジューリングアプリによって15分ごとに起動される小さなExcelファイルがあります。

Excelセルの関数は、ネットワーク上のさまざまな場所からデータを読み取り、このExcelファイルのセルに格納します。それはすべて完璧に機能します。

次に、VBAコードはファイルを保存し、Application.Quitを実行します。

以前のバージョンのExcelでは、うまく機能しました。 2016年にアップグレードしてから、Application.Quitは「Excelインターフェイス」を閉じますが、タスクマネージャは100個の「Excel.exe」がまだそこにあり、それぞれ最大40MBのメモリを使用していることを示しています。

添付の図は、この時点でコンピューターの実行時間が2時間未満であったため、タスクマネージャーのExcel.exeは5つだけを示しています。しかし、24時間後、それらは約100個あります。そのため、コンピューターは数日以内にクラッシュします。

Excel.exe still running


迅速な支援に感謝します。元の質問を編集して、ここに回答を入れることになっているのかどうかはわかりません。

これがコードです。セル値の実際の更新は、セル自体で実行されます。工場内の一部のPLCから値を読み取るアドインがあります。それはすべてうまくいきます。

Private Sub Workbook_Open()
    Application.CalculateFull
    ActiveWorkbook.Save
    Application.Quit
End Sub

起動したExcelファイルが更新されて閉じます。これは、2016年にアップグレードするまで、長年にわたって機能していました。Application.Quitを使用すると、Excelが完全になくなります。今はやめろ。

6
Davidfox789

Excel 2016以前は、Excelには1つのウィンドウに複数のExcelファイルを含めることができました。

Excel 2016では、アプリケーションごとに1つのウィンドウです。

コードの問題は、インスタンスを閉じることです。 Excelファイルがどのように開かれたかという事実に基づいて、これで十分かどうかはわかりません。たとえば、Excelファイルを同じインスタンスで開いた場合、これで十分です。

3
Vityata

私自身少しアマチュアで、これは少し古いスレッドだと思いますが、ブックを保存するだけでなく、ブックを閉じてExcelを終了すると、タスクマネージャーがクリアされる可能性があります。ブックを保存しましたが、実際にはブックを閉じていないため、開いたままになっています。私は以前に同様の問題に遭遇しました、そして私はこれが最終的にそれを修正したものだと思います。

これは、Excelを終了するたびに使用するコードです。通常、私は2冊の本を開いています。1冊はテンプレート(保存しません)で、もう1冊はテンプレートのデータを使用して作成されたものです。

ActiveWorkbook.Close SaveChanges:=True
Application.Quit
ActiveWorkbook.Close SaveChanges:=False
2
Chris Murrell

この答えは私のために働いた: Excel.Application Object .QuitはExcel.EXEを実行したままにする

基本的に、ブックオブジェクトを保持する必要があります。次に、それらを閉じた後、quitを呼び出す前にブックをNothingに設定します。そうしないと、ブックはガベージコレクションされず、Excel.EXEインスタンスを開いたままにします。 Excelを開いたままにできるブック以外のオブジェクトもあるかもしれません。これらの他のオブジェクトに注意し、終了する前にクリーンアップしてください。私は子供たちにいつもそう言っていますが、彼らは決して耳を傾けません。正直なところ、Application.Quitがそれ自体の後でクリーンアップされないのはばかげていると思いますが、c'est lavieです。

0
Jroonk