首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在excel vba中清除内存以防止“内存不足错误”?

如何在excel vba中清除内存以防止“内存不足错误”?
EN

Stack Overflow用户
提问于 2013-01-18 18:32:33
回答 7查看 322.6K关注 0票数 26

我在一个大的电子表格上运行VBA代码。如何在过程/调用之间清除内存以防止发生“内存不足”问题?

谢谢

EN

回答 7

Stack Overflow用户

发布于 2015-11-20 22:11:45

我找到了一种变通方法。起初,它似乎会占用更多的时间,但由于交换更少,可用内存更多,它实际上使一切工作得更流畅和更快。这不是一种科学的方法,它需要一些测试才能奏效。

在代码中,让Excel时不时地保存工作簿。我不得不循环遍历一张有360,000行的纸,它被卡住了。在每10,000次之后,我让代码保存工作簿,现在它就像是在32位Excel上一样出色地工作。

如果同时启动任务管理器,您可以看到内存利用率在每次保存后急剧下降。

票数 16
EN

Stack Overflow用户

发布于 2013-01-18 18:36:35

帮助释放内存的最好方法是将大对象设为空:

代码语言:javascript
运行
复制
Sub Whatever()
    Dim someLargeObject as SomeObject

    'expensive computation

    Set someLargeObject = Nothing
End Sub

还要注意,全局变量仍然是从一个调用到另一个调用分配的,所以如果不需要持久性,就不应该使用全局变量,或者在不再需要全局变量时将它们设为空。

但是,在以下情况下,这不会有帮助:

在procedure (obviously)

  • your

不适合内存后,您需要该对象

另一种可能是切换到64位版本的Excel,它应该能够在崩溃之前使用更多的RAM (32位版本通常限制在1.3 at左右)。

票数 15
EN

Stack Overflow用户

发布于 2013-01-18 18:39:25

答案是你不能显式的释放内存,但是你应该在你的例程中释放内存。

不过,一些帮助记忆的小技巧

在退出routine.

  • Ensure之前,请确保将object设置为null。如果需要,请对对象调用
  • 除非绝对必要

,否则不要使用全局变量

我建议在一次又一次地执行该例程后检查内存使用情况,您可能会有内存泄漏。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14396998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档