Excel在几秒钟后冻结在循环中,直到它完成,甚至是立即窗口



我有一堆代码,比如:

Sub dataManage()
fastMacrosENABLE

Dim StartTime As Double
Dim SecondsElapsed As Double
StartTime = Timer

For myRow = 1 To 50000
SecondsElapsed = Round(Timer - StartTime, 2)
Debug.Print myRow; " -- "; SecondsElapsed

For myColumn = 30 To 500
'do some stuff...
Next myColumn
Next myRow
fastMacrosDISABLE
End Sub

其中fastMacrosENABLE优化运行方式:

With Application
.Calculation = xlCalculationManual
.DisplayAlerts = Not opt
.DisplayStatusBar = Not opt
.EnableAnimations = Not opt
.EnableEvents = Not opt
.ScreenUpdating = Not opt
End With
With Worksheet
.EnableCalculation = Not opt
.EnableFormatConditionsCalculation = Not opt
.EnablePivotTable = Not opt
End With

宏运行得很快(考虑到所有的循环(,但令我惊讶的是,大约5到10秒后,excel会冻结,直到宏完成,这样甚至会冻结即时窗口。当宏结束时,一切都恢复正常,甚至即时窗口也显示了最后200行日志

正如你所能想象的,Debug.Print只是为了估计运行时间,然后去喝咖啡、散步或睡到第二天,je je

是否可以避免冻结,并让窗口立即报告调试所有进程

回答您的直接Q

有可能避免冻结吗

在代码中添加一些DoEvents。一个在外环内,但在内环外可能就足够了。

Sub dataManage()
fastMacrosENABLE

Dim StartTime As Double
Dim SecondsElapsed As Double
StartTime = Timer

For myRow = 1 To 50000
SecondsElapsed = Round(Timer - StartTime, 2)
Debug.Print myRow; " -- "; SecondsElapsed
DoEvents
For myColumn = 30 To 500
'do some stuff...
Next myColumn
Next myRow
fastMacrosDISABLE
End Sub

请注意,这会使您的代码慢一点。

也就是说,你的";做一些事情";代码最好进行很好的优化。。。

最新更新