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

在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本身是否存在导致此类崩溃的因素?也许历史需要澄清或者类似的事情?
以前有人有过这种情况吗?

使用Application.screenUpdatement=False是否可以接受?这会有帮助吗?实际上我已经在使用它了。我将修改我发布的代码以显示位置。你认为我在代码中使用它的位置可能是问题的原因吗?不确定它是否有帮助,但我相信Application.screenUpdate可以而且可能更好地放在Do…Loop之外,甚至与。我会在主工作簿中创建一个新的工作表,并记录每个已处理工作簿的时间。这将有助于检测任何模式。我会在每次关闭后包括Set targetWorkbook=Nothing,以确保释放内存。我同意每个工作簿Application.screenUpdate=False/True是个坏主意;我使用12000的简单表单xxx来表示进度。通常这是一个坏主意,但尝试创建一个单独的Excel.Application对象,并使用它打开/保存/关闭要处理的工作簿。当此崩溃时,希望不会影响运行ProcessWorkbooks宏的Excel.Application对象。这可能会让您更好地了解出了什么问题,或者更简单地说,是一种使用错误处理重新启动流程的方法