Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排序和格式化执行太快?(VBA)_Vba_Performance_Sorting_Formatting_Doevents - Fatal编程技术网

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

排序和格式化执行太快?(VBA),vba,performance,sorting,formatting,doevents,Vba,Performance,Sorting,Formatting,Doevents,在脚本的最后,我将根据单元格值对单元格进行格式化(主要是内部颜色),并根据这些单元格的值对行进行排序 如果我在中断模式下一次运行一行整个脚本,它将完美地执行该过程。 但是,当我从头到尾运行整个脚本而不暂停格式化和排序时,不会发生。 我有两个子过程,一个用于格式化,一个用于排序。如果我在整个代码执行后再次单独运行它们,它们将执行它们应该执行的操作。 我能想到的唯一原因是代码执行速度太快,无法容纳剩余的内存量,有些命令会被覆盖。我只是一个VBA新手,所以如果我错了,请告诉我 我尝试过激活屏幕更新,也

在脚本的最后,我将根据单元格值对单元格进行格式化(主要是内部颜色),并根据这些单元格的值对行进行排序

如果我在中断模式下一次运行一行整个脚本,它将完美地执行该过程。 但是,当我从头到尾运行整个脚本而不暂停格式化和排序时,不会发生。 我有两个子过程,一个用于格式化,一个用于排序。如果我在整个代码执行后再次单独运行它们,它们将执行它们应该执行的操作。 我能想到的唯一原因是代码执行速度太快,无法容纳剩余的内存量,有些命令会被覆盖。我只是一个VBA新手,所以如果我错了,请告诉我

我尝试过激活屏幕更新,也尝试过在代码的相关部分之前和之后放置DoEvents

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

我使用DoEvents的方法是将OpenForm=DoEvents放在我认为可能需要处理本地队列的行上,或者与If语句和Mod inside 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

几周前,我自己也面临着同样的问题,我在某个论坛上找到了解决办法,可惜我记不得了。学分归未知 但是,我有代码,它可以正常工作:

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