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 自体に、この種のクラッシュを引き起こす可能性のあるものはありますか? たぶん、歴史を一掃する必要がありますか?誰もこれが以前に起こったことがありますか?