我有一堆代码,比如:
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
请注意,这会使您的代码慢一点。
也就是说,你的";做一些事情";代码最好进行很好的优化。。。