是什麼做這些點:多少設置這些屬性加快您的Excel宏:Application.ScreenUpdating,Application.DisplayAlerts
Application.ScreenUpdating = False
Application.DisplayAlerts = False
是否真的保存多少時間?
是什麼做這些點:多少設置這些屬性加快您的Excel宏:Application.ScreenUpdating,Application.DisplayAlerts
Application.ScreenUpdating = False
Application.DisplayAlerts = False
是否真的保存多少時間?
同意。
我發現,當您關閉ScreenUpdating
,Calculation
,最好想想如何做到的事情(寫入,讀取,事件,...),儘可能爲少ScreenUpdating
電話的回報。這將加速運營,同時也爲用戶提供更好,更可忍受的體驗。比如說,你想盡可能快地寫一些數據到一張紙上。你可以這樣做:
For Each row In rowDic.Keys()
' turn off updating
for item in rowDic.Key(row)
... do some writes
Next
' turn on updating
Next
或走得更快,你可以這樣做:
' turn off updating
For Each row In rowDic.Keys()
for item in rowDic.Key(row)
... do some writes
Next
Next
' turn on updating
同樣,當寫入數據時,它的最快寫入較大的塊,較少的時間。所以如果有的話,理想的寫入次數是1次。您可以將Range
視爲2D array[rows,cols]
。我發現下面是有效的:
' turn off updates
' Organise data in ram so that it fits the range for which it is meant
Dim two_d_arr (rows,cols)
loadDataFromSource two_d_arr
Dim destinationRange as Range
destinationRange = Sheets(someSheet).Range(someRange).Value = two_d_arr
Redim two_d_arr(0,0) ' !!! RELEASE MEMORY
' turn on updates
在這裏,有沒有循環,這每一個單獨的任務的時間優化從而導致更快的處理時間,並反過來似乎使Excel中正常工作的CPU中(不崩潰)。
HTH,
˚F
絕對。幾年前,我有一個運行時間很長的宏,花了差不多一分鐘的時間。我將ScreenUpdating設置爲false,並在5秒內完成。
只要確保你重新ScreenUpdating爲true,當你完成運行宏。
也不要忘記設置ScreenUpdating作爲任何錯誤handeling代碼的第一步你有 – 2010-05-28 07:09:21
這取決於有多少你實際上是在屏幕上更新爲你的代碼的一部分(即細胞更新的數量),而且很多片如何在那裏,有多少張/細胞是指板材的代碼更新和整個工作簿中有多少公式。
每次在片改變一些事情的時候,Excel中重新計算所有公式。所以如果你的代碼沒有更新太多的表格/單元格,但是你的工作簿有很多公式,那麼關閉屏幕更新可能根本無法幫到你。
要考慮perfomance還有一件事是計算屬性,將其設置爲xlCalculationManual以關閉自動迴歸並在最後將其變回xlCalculationAutomatic。
Application.Calculation = xlCalculationManual
還有一點要求索的活動,如果其中一個或多個表的有Worksheet_Chnage或Worksheet_Calculate事件處理每一個你的代碼做會引發他們的變化和你的代碼需要等待,直到他們回來了。所以在你的代碼中關閉它。
Application.EnableEvents = False
在大多數我的代碼,我susally使用
On Error GoTo lblError
Dim bEvents As Boolean, iCalc As Integer, bScrnUpd As Boolean
bEvents = Application.EnableEvents
iCalc = Application.Calculation
bScrnUpd = Application.ScreenUpdating
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
'-----------------------My code
Application.EnableEvents = bEvents
Application.Calculation = iCalc
Application.ScreenUpdating = bScrnUpd
Exit Sub
'reset them even if you are exiting due to error
lblError:
Application.EnableEvents = bEvents
Application.Calculation = iCalc
Application.ScreenUpdating = bScrnUpd
Debug.print Err.Description
完美的答案(這應該是接受的答案)。 「更全面的解釋學校」的典範:例子和樣板文件展示瞭如何最小化代碼對用戶的影響。 – 2014-02-20 17:19:33
screenUpdating的改善在很大程度上取決於你的宏是如何編寫的。 這將是特別有用的那些可怕的宏由錄音機,充滿了不必要的「選擇」和「激活」。
當你不希望用戶看到屏幕更新我不會用那些「速度」但對於「功能」
:
Application.ScreenUpdating = False
當你不想用戶可以看到從應用程序的每個多餘消息:
Application.DisplayAlerts = False
特別是因爲沒有人願意被威脅到死亡,問你「真是」要更新的消息後,追加或刪除[R ecords。我更喜歡屏蔽這些用戶。
DisplayAlerts無關如何快速程序運行時,它只會抑制默認的Excel警告(例如提示確認表刪除),您可能會或可能不希望壓制。 (我想技術上它會讓它運行得更快,因爲沒有對話框,但你知道我的意思)。 – goggin13 2010-05-28 02:45:39