Excel在重复打开和关闭工作簿时崩溃
在Excel2003中,我看到一个宏发生了一件奇怪的事情,该宏是我为自动修改工作簿列表而编写的。我有12000本工作簿要修改,所以我需要依次打开每一本,在里面做一些事情,然后保存并关闭。 在处理了大约1000本工作簿(有时是几百本)之后,Excel就崩溃了 下面是我正在做的工作的伪代码Excel在重复打开和关闭工作簿时崩溃,excel,excel-2003,vba,Excel,Excel 2003,Vba,在Excel2003中,我看到一个宏发生了一件奇怪的事情,该宏是我为自动修改工作簿列表而编写的。我有12000本工作簿要修改,所以我需要依次打开每一本,在里面做一些事情,然后保存并关闭。 在处理了大约1000本工作簿(有时是几百本)之后,Excel就崩溃了 下面是我正在做的工作的伪代码 public sub ProcessWorkbooks() dim i as Integer dim targetWorkbook as Workbook With thisWorkb
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本身是否存在导致此类崩溃的因素?也许历史需要澄清或者类似的事情?
以前有人有过这种情况吗?使用Application.screenUpdatement=False是否可以接受?这会有帮助吗?实际上我已经在使用它了。我将修改我发布的代码以显示位置。你认为我在代码中使用它的位置可能是问题的原因吗?不确定它是否有帮助,但我相信Application.screenUpdate可以而且可能更好地放在Do…Loop之外,甚至与。我会在主工作簿中创建一个新的工作表,并记录每个已处理工作簿的时间。这将有助于检测任何模式。我会在每次关闭后包括Set targetWorkbook=Nothing,以确保释放内存。我同意每个工作簿Application.screenUpdate=False/True是个坏主意;我使用12000的简单表单xxx来表示进度。通常这是一个坏主意,但尝试创建一个单独的Excel.Application对象,并使用它打开/保存/关闭要处理的工作簿。当此崩溃时,希望不会影响运行ProcessWorkbooks宏的Excel.Application对象。这可能会让您更好地了解出了什么问题,或者更简单地说,是一种使用错误处理重新启动流程的方法