在 Excel2003 中,我看到一个奇怪的事情发生在我编写的用于自动修改工作簿列表的宏中。我有一个包含 12000 个工作簿的列表要修改,所以我需要依次打开每个工作簿,在里面做一些事情,然后保存并关闭。在处理了大约 1000 个工作簿(有时还有几百个)后,Excel 就会崩溃。
这是我正在做的伪代码
public sub ProcessWorkbooks()
dim i as Integer
dim targetWorkbook as Workbook
With thisWorkbook.Sheets("Main").Range("A15")
Do While .Offset(i, 0).Value <> ""
set targetWorkbook = Application.Workbooks.Open(.Offset(i, 3).Value)
If targetWorkbook Is Nothing Then
Goto NextIteration
End If
Application.ScreenUpdating = False
Call ProcessWorkbook(targetWorkbook)
Call targetWorkbook.Save
DoEvents
Call targetWorkbook.Close
Application.ScreenUpdating = True
NextIteration:
i = i + 1
Loop
End With
end sub
我的第一个想法是内存泄漏,但后来我认为 Excel 在崩溃之前应该变得非常慢,但是执行速度在崩溃之前保持不变(虽然我还没有坐在那里看几千本工作簿...... .)。Excel 本身有什么东西会导致这种崩溃发生吗?也许历史需要清除或类似的东西?以前有没有人发生过这种情况?