我有一个小的excel文件,每15分钟由一个调度应用程序启动。
excel单元格中的函数从网络上的各个位置读取数据,并将其存储在此excel文件的单元格中。这一切都很完美。
VBA代码然后保存文件并执行Application.Quit。
在以前版本的excel中,它运行良好。自升级到2016年以来,Application.Quit
关闭了" excel界面"但任务管理器显示一百个Excel.exe仍然坐在那里,每个使用40MB的内存。
附图显示了任务管理器中只有五个excel.exe,因为此时计算机只运行不到两个小时。但是24小时后大约有100个。所以计算机会在几天内崩溃。
感谢您的快速帮助。我不确定我是否应该通过编辑我原来的问题来回答我的问题。
这是代码。单元格值的实际更新在单元格本身中执行。有一个Add In,它从我们工厂的某些PLC中读取值。一切正常。
Private Sub Workbook_Open()
Application.CalculateFull
ActiveWorkbook.Save
Application.Quit
End Sub
当它启动的excel文件时,它会更新并关闭。这已经工作了很多年,直到我们升级到2016年.Application.Quit将使excel完全消失。不是现在。
答案 0 :(得分:3)
在 Excel 2016 之前,Excel可以在一个窗口中显示多个Excel文件。
在 Excel 2016 中,每个应用程序只有一个窗口。
代码的问题在于它关闭了一个实例。根据Excel文件的打开方式,这可能是否足够。例如,如果在同一个实例中打开了Excel文件,那就足够了。
答案 1 :(得分:1)
我自己是一个业余爱好者,我意识到这是一个旧线程,但是我想知道是否保存工作簿(如您所做的那样)但还关闭工作簿并退出Excel,这可能会清除任务经理。我注意到您保存了工作簿,但实际上并未关闭工作簿,因此它保持打开状态。我之前遇到过类似的问题,我认为这终于解决了问题。
这是我每次要退出Excel时都使用的代码。通常我会打开两本书,一本书是模板(我不保存),另一本书是使用模板中的数据创建的。
ActiveWorkbook.Close SaveChanges:=True
Application.Quit
ActiveWorkbook.Close SaveChanges:=False
答案 2 :(得分:0)
此答案对我有用: Excel.Application Object .Quit leaves EXCEL.EXE running
基本上,您需要保留工作簿对象。然后,在关闭它们之后,在调用quit之前将工作簿设置为Nothing,否则将不会对工作簿进行垃圾回收,并保持EXCEL.EXE实例处于打开状态。除了工作簿以外,可能还有其他一些对象可以使excel保持打开状态。退出之前,请注意这些其他对象并进行清理。我一直告诉我的孩子,但是他们从不听。老实说,我认为Application真是愚蠢。Quit本身并不会自动清理,但请耐心等待。