首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel,VBA:清除内存

Excel,VBA:清除内存
EN

Stack Overflow用户
提问于 2013-10-22 08:53:22
回答 2查看 86.9K关注 0票数 2

我有一个Excel宏,没有太花哨的东西,没有对象,只是简单的有公式的旧循环。基本上是这样:

我在一列中循环行,将相当大的SUMPRODUCT函数分配给单元格,而不执行它们。一旦我遍历行,我就执行两次Range.Value = Range.Value,以执行公式并将结果保存为值。然后我去看下一篇专栏。

随着Excel使用的每一列内存的显着增加,在宏完成并保存文件之后,内存仍然被使用(如果我可以信任任务管理器)。在我关闭并重新打开文件之后--当然,所有内存都被释放了,我可以继续工作。由于内存限制,我已经到了无法处理32位Excel上所需的所有列的地步。

我在想,也许我可以在列之间实现一些技巧,让Excel忘记它一直记得的东西?我并不关心它是否会影响性能(如果它缓存了任何对进一步计算有用的东西),我只需要防止内存使用量增长到无法处理的程度。我谷歌了一些,但所有的建议都是关于设置大的对象为零-我并没有真正设置任何东西,只是循环,所以这可能不适用于我的情况。

代码是这样的(现在我没有它,但它是其中所包含内容的一般简化版本):

代码语言:javascript
复制
for i = 1 to 12
    ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Font.Color = vbWhite

    for m = 1 to x
        ThisWorkbook.ActiveWorksheet.Cells(m, i).Formula = "'=SUMPRODUCT(blah)"
    next m

    ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value = ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value
    ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value = ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value

    ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Font.Color = vbBlack
next i

基本上,我把它们涂成白色,这样我就不会看到杂乱无章的函数文本,添加函数,执行它,保存为值,将文本涂成黑色。的重要补充:我使用SUMPRODUCT从关闭的文件中求和一些单元格.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-22 10:11:46

这些代码并不足以帮助您提高效率。不过,我现在可以为你指出一些建议。

要记住的第一件事是在宏开始时将应用程序屏幕更新切换为false。

Application.ScreenUpdating = False

然后在宏代码结束前将其切换回来。

Application.ScreenUpdating = True

现在没有必要更改字体颜色了。在执行宏时,您的屏幕将被锁定以进行刷新,因此在宏完成工作之前,您将不会看到这些更改。

考虑一下,也禁用事件。

Application.EnableEvents = FalseApplication.EnableEvents = true与屏幕更新相同。

第二件事是使用thing ()函数。请在谷歌上搜索并阅读该功能的效率。

与其将函数放入单元格,然后执行.Value = .Value,您只需Evaluate()一个表达式,并将结果直接返回到单元格,这要快得多!

所以你可以做这样的事

代码语言:javascript
复制
for i = 1 to 12
    ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value = Evaluate("=SUM(blah)")
next i

我希望你明白这个想法。

以下是一些关于如何加快宏速度的技巧链接:

  • http://msdn.microsoft.com/en-us/library/office/ff193019.aspx
  • http://fastexcel.wordpress.com/2011/11/02/evaluate-functions-and-formulas-fun-how-to-make-excels-evaluate-method-twice-as-fast/
  • http://www.soa.org/news-and-publications/newsletters/compact/2012/january/com-2012-iss42-roper.aspx
  • http://xlvba.fr.yuku.com/topic/278/The-Evaluate-Method#.UmZP6Pmkp8s
票数 6
EN

Stack Overflow用户

发布于 2016-04-27 12:19:46

我知道这是一个老问题,但似乎可行的方法是保存工作簿。每隔一段时间运行一次ThisWorkbook.Save,如果您在任务管理器中监视EXCEL,您会注意到它清除了大量内存。

看起来Excel可能在缓存某些函数调用或其他什么,并且保存清除了这个缓存。

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

https://stackoverflow.com/questions/19513271

复制
相关文章

相似问题

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