gpt4 book ai didi

vba - Excel、VBA : Clear memory

转载 作者:行者123 更新时间:2023-12-03 00:12:49 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com