[英]vba sub slow after first execution
我見過其他人有類似的問題,但沒有真正的答案。
當我運行將數據導入到3個工作表中的子程序,然后從這3個工作表中編譯第4個工作表時,它僅運行了17秒。
17秒的主要部分是在13.86秒內將10,000行(每個26列)數據寫入輸出表,每秒執行720行以上。
當我再次運行此子程序而沒有關閉excel時,就會出現問題,這將永遠! 導入階段並沒有變慢,但是寫入輸出表的速度卻降低到了每秒17行的差勁。 (速度降低35倍)
我已經測試了有關VBA的所有知識,但我不知道為什么。
Sub的開頭始終使用
If sh.AutoFilterMode Then sh.AutoFilterMode = False
sh.Columns.Hidden = False
sh.Rows.Hidden = False
sh.Cells.Clear
sh.Cells.Delete
我一直用它來清除工作表,從來沒有問題,直到找到解決我的問題的方法為止,實際上是刪除了4個工作表並重新創建它們,這解決了速度降低的可怕問題。
上面的代碼沒有刪除並導致此速度下降問題的表格上留下了什么?
我還保留了工作表中的所有數據,並保存並關閉了工作簿,打開excel后,我在第一次運行時仍然獲得了理想的性能,因此它不是工作表上的實際數據。
注意:其余代碼只是標准循環和寫入單元格,我100%確信這不是此問題的問題
根據您的描述,我認為可能的解決方案如下。
application.screenupdating = false
在你的第一個分和application.screenupdating = true
退出前分。 application.calculation = xlCalculationManual
放在您的子application.calculation = xlCalculationManual
的第一個位置,將application.calculation = xlCalculationAutomatic
退出子application.calculation = xlCalculationAutomatic
前面。 使用數組變量。 如果要輸入范圍100000 x 26(“ A1:Z100000”),則正常和慢速方式如下
for i = 1 to 100000 for j = 1 to 26 cells(i,j).value = 123 next j next i
快速的方法是
dim ary(100000 - 1, 26 -1) as variant 'make an array for i = lbound(ary, 1) to ubound(ary, 1) for j = lbound(ary, 2) to ubound(ary, 2) ary(i, j) = 123 next j next i range("a1").resize(ubound(ary, 1) - lbound(ary, 1) + 1, ubound(ary, 2) - lbound(ary, 2) +1).value = ary
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.