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

时间:2017-07-12 07:11:47

标签: vba performance sorting formatting doevents

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

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

我能想到的唯一原因是代码执行得太快,无法留下大量内存,而某些命令会被覆盖。我不过是VBA的新手,所以如果我错了请赐教。

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

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

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

我的排序代码如下所示(变量 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

1 个答案:

答案 0 :(得分:1)

几个星期前我自己也遇到了同样的问题,我在一些论坛找到了解决方案,遗憾的是我不记得了。积分不明 但是,我有代码,它工作正常:

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