我在我的脚本格式化单元格的末尾(主要是内部颜色取决于单元格值)并根据这些单元格的值对行进行排序。
- 如果我以中断模式(一次一行)运行整个脚本,它将完美地执行该过程。
- 但是,当我从头到尾运行整个脚本而不暂停格式化和排序时,不会发生。
- 我有两个子程序,一个用于格式化,一个用于排序。如果我在执行整个代码后再次单独运行它们,它们会执行它们应该执行的操作。
我能想到的唯一原因是代码执行速度太快,超出了剩余的内存量,并且某些命令被覆盖了。但是,我只是一个 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