我有一個宏的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