我有一个宏的Excel,没有太花哨,没有对象,只是普通的旧周期与公式。基本上是这样的:Excel,VBA:清除内存
我循环遍历一列中的行,为单元分配相当大的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来从封闭文件中求和一些单元格。
向我们展示您的代码:) – 2013-10-22 08:55:29
是的,对不起,添加了简化的代码示例:)所有其他代码基本上都是清除某些单元格,消息框和几个ifs中的内容,这些内容不应该增加主题。 – pokrishka
你可以尝试用VBA代码替换'SUMPRODUCT'调用吗?这样,您可以对外部工作簿何时打开和关闭有更多的控制权,或者甚至可以将它们隔离到单独的实例中。奖励:不需要'.Value = .Value'。 – Chel