"Application.Quit" 在后台留下 Excel 运行

"Application.Quit" leaves Excel running in the background

我有一个小的 excel 文件,由日程安排应用程序每 15 分钟启动一次。

excel 单元格中的函数从网络上的不同位置读取数据并将其存储在该 excel 文件的单元格中。一切正常。

VBA 代码然后保存文件并执行 Application.Quit.

在之前的版本excel中,效果很好。自升级到 2016 年以来,Application.Quit 关闭了 "excel interface",但任务管理器显示一百个 "Excel.exe" 仍然坐在那里,每个占用 40MB 内存。

所附图片显示任务管理器中只有五个 excel.exe,因为此时计算机只 运行 不到两个小时。但 24 小时后,大约有 100 个。所以没几天电脑就死机了


感谢您的快速帮助。我不确定是否应该通过编辑我的原始问题将我的回复放在这里。

这是代码。单元格值的实际更新是在单元格本身中执行的。有一个插件可以从我们工厂的一些 PLC 读取值。一切正常。

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

当 excel 文件启动时,它会更新并关闭。这已经工作了很多年,直到我们升级到 2016 年。Application.Quit 会使 excel 完全消失。现在不行。

Excel 2016 之前,Excel 有可能在单个 window 中包含多个 Excel 文件。

2016Excel,每个申请一个window。

您的代码的问题在于它关闭了一个实例。根据 Excel 文件的打开方式,这是否足够。例如,如果 Excel 个文件在同一实例中打开,这就足够了。

我自己有点业余,我意识到这是一个有点老的话题,但我想知道你是否保存了工作簿(像你一样)但也关闭了工作簿并退出 Excel,它可能会清除任务管理器。我注意到您保存了工作簿,但实际上并没有关闭工作簿,因此它保持打开状态。我 运行 之前遇到过类似的问题,我认为这最终解决了它。

这是我每次想退出时使用的代码 Excel。通常我打开两本书,一本是模板(我不保存),另一本是用模板中的数据创建的。

ActiveWorkbook.Close SaveChanges:=True
Application.Quit
ActiveWorkbook.Close SaveChanges:=False

这个答案对我有用:

基本上,您需要抓住您的工作簿 objects。然后在关闭它们之后,在调用 quit 之前将工作簿设置为 Nothing,否则工作簿将不会被垃圾收集并保持 EXCEL.EXE 实例打开。除了工作簿之外,可能还有 objects 也可以保持 excel 打开。请注意这些其他 objects 并在退出前清理。我一直告诉我的孩子们,但他们从来不听。老实说,我认为 Application.Quit 没有自行清理是很愚蠢的,但是这就是生活。