我有一个Excel宏,没有什么花哨的东西,没有对象,只是带有公式的简单旧循环。基本上是这样的:
我在一行中的各行之间循环,将相当大的SUMPRODUCT函数分配给单元格而不执行它们。循环浏览完行后,我将执行Range.Value = Range.Value两次以执行公式并将结果另存为值。然后,我进入下一篇专栏。
随着Excel使用的每一列内存显着增加,并且在完成宏并保存文件后-内存仍在使用(如果我可以信任任务管理器)。关闭并重新打开文件后,所有内存当然都已释放,我可以继续工作。由于内存限制,我已经无法处理32位Excel上需要的所有列。
我想知道,也许我可以在各列之间实施一些技巧,以使Excel忘记它要记住的内容?我并不在乎它是否会影响性能(以防它缓存了对进一步计算有用的任何东西),我只需要防止内存使用量过大而无法处理。我在Google上搜索了一下,但是所有建议都与将大对象设置为空有关-我实际上并没有对任何东西设置太多内容,只是循环浏览,所以可能不适用于我的情况。
代码是这样的(现在不要放在我身上,但这是其中的通用简化版本):
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 = False
和Application.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
希望您能明白。
以下是一些有关如何加速宏的提示的链接:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句