2014-01-10 53 views
0

下面的代碼將命名範圍「MasterLLTable」複製n次,其中n是兩個整數NumTables和UserNumTables之間的差異。 n可以在幾百,所以循環可能需要幾秒鐘的時間才能運行。有沒有辦法通過用更有效的方式替換While循環來加速此操作?如果可能的話,需要在沒有While循環的情況下製作n個「MasterLLTable」副本。而且,表格之間的間距必須保留。用更高效的代碼替換While循環嗎?

Do While NumTables < UserNumTables     
    Range("MasterLLTable").Copy EIRPLL.Cells(LastLLRow + 2, 2) 
    LastLLRow = EIRPLL.UsedRange.Rows.Count 
    NumTables = (EIRPLL.UsedRange.Rows.Count - 4)/15 
Loop 

回答

3

該代碼是相當優化的,有些東西可以挑選,但這很可能不是導致執行速度緩慢的原因。由於發生所有互操作,VBA本質上很慢。但是,你可以用一些小技巧加速這一過程:

  • 首先,設置Application.Calculation = xlCalculationManual執行循環,然後Application.Calculation = xlCalculationAutomatic循環執行前後。這將阻止Excel在每次粘貼操作後計算每個單元格。

  • 其次,您可以在設置Application.Calculation的同時設置Application.ScreenUpdating = FALSE,這將停止GUI在腳本運行時更新任何內容。循環完成後(或腳本),設置Application.ScreenUpdating = TRUE以使Excel再次開始執行其操作。

我注意到,這兩件事情往往會造成VBA腳本性能的最大差異。有一個網站Optimizing VBA,通過其他一些你可以做的事情,但他們可能不值得你花時間。在我回答的另一個問題上有更多的關於這個問題的討論:VBA - Code Execution is Extremely Slow

+0

雖然我沒有包括它,但我的較大的代碼暫時禁用屏幕更新,但它沒有禁用手動計算。現在,它確實。巨大差距!謝謝你的提示。 – jmaz