排序和格式化的执行速度太快? (VBA)
Too fast executions for sorting and formatting? (VBA)
我的脚本格式化单元格(主要是内部颜色取决于单元格值)和根据这些单元格的值对行进行排序的过程即将结束。
- 如果我 运行 整个脚本处于中断模式(一次一行),它会完美地执行该过程。
- 但是,当我运行整个脚本从头到尾没有暂停格式化和排序时,不会出现。
- 我有两个子程序,一个用于格式化,一个用于排序。如果我 运行 在执行整个代码后再次单独使用它们,它们将执行它们应该执行的操作。
我能想到的唯一原因是代码执行速度对于剩余内存量来说太快了,一些命令被覆盖了。不过本人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
几周前我自己也遇到了同样的问题,我在某个论坛上找到了解决方案,遗憾的是我不记得了。学分去未知
但是,我有代码并且工作正常:
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
我的脚本格式化单元格(主要是内部颜色取决于单元格值)和根据这些单元格的值对行进行排序的过程即将结束。
- 如果我 运行 整个脚本处于中断模式(一次一行),它会完美地执行该过程。
- 但是,当我运行整个脚本从头到尾没有暂停格式化和排序时,不会出现。
- 我有两个子程序,一个用于格式化,一个用于排序。如果我 运行 在执行整个代码后再次单独使用它们,它们将执行它们应该执行的操作。
我能想到的唯一原因是代码执行速度对于剩余内存量来说太快了,一些命令被覆盖了。不过本人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
几周前我自己也遇到了同样的问题,我在某个论坛上找到了解决方案,遗憾的是我不记得了。学分去未知 但是,我有代码并且工作正常:
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