2017-07-12 46 views
0

我在我的腳本格式化單元格(主要取決於單元格的值主要是內部顏色)和排序行與這些單元格的值結束。排序和格式化的執行速度過快? (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 

回答

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