排序和格式化执行速度太快?(VBA)



我在脚本结束时格式化单元格(主要是内部颜色,具体取决于单元格值(并根据这些单元格的值对行进行排序。

  • 如果我在中断模式下运行整个脚本(一次一行(,它会完美地执行该过程。
  • 但是,当我从头到尾运行整个脚本而不暂停格式和排序时,不会发生排序。
  • 我有两个子过程,一个用于格式化,一个用于排序。如果我在整个代码执行后再次单独运行它们,它们会执行它们应该做的事情。

我能想到的唯一原因是代码执行得太快,无法容纳剩余的内存量,并且某些命令被覆盖。但是,我只是一个VBA新手,所以如果我错了,请启发我。

我尝试激活ScreenUpdating,并尝试在代码的相关部分之前和之后放置DoEvents

处理代码执行速度过快的方法是什么?除了DoEvents之外,还有其他方法可以释放VBA代码中的内存吗?


我使用DoEvents的方法是将OpenForm = DoEvents放在我认为可能需要处理本地队列的行上,或者与 If 语句一起放在 for 循环中Mod

我的排序代码如下所示(变量ws是工作表(:

'Sort rows
With ws.Range("AE2").CurrentRegion
On Error Resume Next
.Sort.SortFields.Clear
On Error GoTo 0
.Cells.Sort Key1:=Range(ws.Cells(2, 33), ws.Cells(LastRow, 33)), Order1:=xlDescending, Orientation:=xlTopToBottom, Header:=xlYes
End With

我的格式代码太长,可能不相关。但它基本上由 If 语句和内部着色组成,例如。

If AbsVal < 3 And AbsVal >= 1 Then DiffCell.Interior.Color = vbRed

几周前我自己也遇到了同样的问题,我在某个论坛中找到了解决方案,可惜我不记得了。演职员表 未知 但是,我有代码并且工作正常:

Sub Sort()
'Sorting code
Application.OnTime Now + TimeValue(a few seconds depending on your choice, pre), " Color "
End Sub

Sub Color()
'coloring code
Exit Sub

最新更新