排序和格式化执行太快?(VBA)
在脚本的最后,我将根据单元格值对单元格进行格式化(主要是内部颜色),并根据这些单元格的值对行进行排序 如果我在中断模式下一次运行一行整个脚本,它将完美地执行该过程。 但是,当我从头到尾运行整个脚本而不暂停格式化和排序时,不会发生。 我有两个子过程,一个用于格式化,一个用于排序。如果我在整个代码执行后再次单独运行它们,它们将执行它们应该执行的操作。 我能想到的唯一原因是代码执行速度太快,无法容纳剩余的内存量,有些命令会被覆盖。我只是一个VBA新手,所以如果我错了,请告诉我 我尝试过激活屏幕更新,也尝试过在代码的相关部分之前和之后放置DoEvents 您处理过快代码执行的方式是什么?除了DoEvents之外,还有其他方法可以释放VBA代码中的内存吗 我使用DoEvents的方法是将OpenForm=DoEvents放在我认为可能需要处理本地队列的行上,或者与If语句和Mod inside for循环一起 我的排序代码如下所示:变量ws是工作表:排序和格式化执行太快?(VBA),vba,performance,sorting,formatting,doevents,Vba,Performance,Sorting,Formatting,Doevents,在脚本的最后,我将根据单元格值对单元格进行格式化(主要是内部颜色),并根据这些单元格的值对行进行排序 如果我在中断模式下一次运行一行整个脚本,它将完美地执行该过程。 但是,当我从头到尾运行整个脚本而不暂停格式化和排序时,不会发生。 我有两个子过程,一个用于格式化,一个用于排序。如果我在整个代码执行后再次单独运行它们,它们将执行它们应该执行的操作。 我能想到的唯一原因是代码执行速度太快,无法容纳剩余的内存量,有些命令会被覆盖。我只是一个VBA新手,所以如果我错了,请告诉我 我尝试过激活屏幕更新,也
'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