vba - Excel、VBA : Clear memory

标签 vba excel memory

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

我循环浏览一列中的行,将相当大的 SUMPRODUCT 函数分配给单元格而不执行它们。一旦我循环浏览该行,我就会执行 Range.Value = Range.Value 两次来执行公式并将结果保存为值。然后我进入下一专栏。

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

我想知道,也许我可以在列之间实现一些技巧,让 Excel 忘记它一直记住的任何内容?我真的不在乎它是否会影响性能(如果它缓存了任何对进一步计算有用的东西),我只需要防止内存使用量变得太大而无法处理。我用谷歌搜索了一下,但所有的建议都与将大对象设置为空有关 - 我实际上并没有将任何东西设置为任何东西,只是循环浏览,所以这可能不适用于我的情况。

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

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 对关闭文件中的一些单元格求和。

最佳答案

这实际上并不足以帮助您提高效率。不过,我现在可以为您指出一些提示。

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

Application.ScreenUpdating = False

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

Application.ScreenUpdating = True

现在无需更改字体颜色。在执行宏时,您的屏幕将锁定以进行刷新,因此在宏完成工作之前您不会看到更改。

考虑一下,也禁用事件。

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

第二件事是使用 Evaluate() 函数。请用谷歌搜索并了解该功能的效率如何。

无需将函数放入单元格,然后执行 .Value = .Value,您只需 Evaluate() 一个表达式,然后将结果直接返回到单元格,即更快!

所以你可以做类似的事情

for i = 1 to 12
    ThisWorkbook.ActiveWorksheet.Range(Cells(1,i),Cells(x,i)).Value = Evaluate("=SUM(blah)")
next i

我希望你能明白。

以下是一些链接,其中包含有关如何加快宏速度的提示:

关于vba - Excel、VBA : Clear memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19513271/

相关文章:

excel - 如何按特定列值转置标题行值组

excel - 检查单元格是否包含 Excel 中的链接

Python:如何将所有记录写入/打印到文件中

vba - 如何保存为 excel 和 vba 项目以备将来使用?

c++ - 在缓冲区之间移动字节时出现意外结果

c - C 中结构体的大小

vba - 我正在尝试在所有工作表中运行此代码,除了工作簿中的一个

vba - 如何从一个工作表中复制特定列并粘贴到另一个工作表中的不同范围内?

c++ - 在 C++ 中,即使调用了 delete,进程什么时候会保留分配的内存?

vba - On错误不适用于IE自动化