我在一个大的电子表格上运行VBA代码。如何在过程/调用之间清除内存以防止发生“内存不足”问题?
谢谢
发布于 2015-11-20 22:11:45
我找到了一种变通方法。起初,它似乎会占用更多的时间,但由于交换更少,可用内存更多,它实际上使一切工作得更流畅和更快。这不是一种科学的方法,它需要一些测试才能奏效。
在代码中,让Excel时不时地保存工作簿。我不得不循环遍历一张有360,000行的纸,它被卡住了。在每10,000次之后,我让代码保存工作簿,现在它就像是在32位Excel上一样出色地工作。
如果同时启动任务管理器,您可以看到内存利用率在每次保存后急剧下降。
发布于 2013-01-18 18:36:35
帮助释放内存的最好方法是将大对象设为空:
Sub Whatever()
Dim someLargeObject as SomeObject
'expensive computation
Set someLargeObject = Nothing
End Sub
还要注意,全局变量仍然是从一个调用到另一个调用分配的,所以如果不需要持久性,就不应该使用全局变量,或者在不再需要全局变量时将它们设为空。
但是,在以下情况下,这不会有帮助:
在procedure (obviously)
不适合内存后,您需要该对象
另一种可能是切换到64位版本的Excel,它应该能够在崩溃之前使用更多的RAM (32位版本通常限制在1.3 at左右)。
发布于 2013-01-18 18:39:25
答案是你不能显式的释放内存,但是你应该在你的例程中释放内存。
不过,一些帮助记忆的小技巧
在退出routine.
,否则不要使用全局变量
我建议在一次又一次地执行该例程后检查内存使用情况,您可能会有内存泄漏。
https://stackoverflow.com/questions/14396998
复制相似问题