2015-05-24 86 views
2

我有一個vba代碼,從另一個excel工作表中複製某些單元格到活動excel工作表。在這裏,用戶不需要查看處理,甚至不需要查看excel應用程序窗口,直到工作完成,我希望工作更快。我通過互聯網閱讀了一些博客,聲稱將Application.screenupdating設置爲false會加快任務的速度。Excel vba Application.screenupdating vs Application.visible

所以,在這裏我的問題是 -

其中Application.screenupdating/Application.visible之一(/兩),我應該設置爲假的?我的理解是,兩個屬性可以通過vba任務的輸出增加,儘管當用戶應該查看應用程序時使用screenupdating屬性,而不是在需要時才使用更新,但是當用戶不需要查看時會使用可見屬性窗戶。我認爲將一個屬性設置爲false可能不需要將其他屬性設置爲false。

請提供您的答案的理由。

回答

4

我沒有直接回答你的問題;但我認爲設置Application.visiblefalse不會提升性能;我更喜歡使用以下代碼:

Public Sub YK_Start() 
    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 
    Application.EnableEvents = False 
    Application.Calculation = xlCalculationManual 
End Sub 

Public Sub YK_End() 
    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 
    Application.EnableEvents = True 
    Application.Calculation = xlCalculationAutomatic 
End Sub 

使用例如:

Sub LoopExample() 
    Dim Cell As Range 
    Call YK_Start 
     Columns("B:F").ClearContents 
     For Each Cell In Range("A1:A100000") 
      Cell.Offset(, 1) = Cell.Value + 1 
      Cell.Offset(, 2) = Cell.Value + 2 
      Cell.Offset(, 3) = Cell.Value + 3 
      Cell.Offset(, 4) = Cell.Value + 4 
      Cell.Offset(, 5) = Cell.Value + 5 
     Next Cell 
    Call YK_End 
End Sub 

此源代碼將在18 seconds而不使用Call YK_StartCall YK_End執行;並且將使用這些程序在10 seconds內執行。

參考:www.officena.net:阿拉伯語辦公論壇。
編輯#1
有很多方法來衡量您的代碼的執行時間;我不知道最準確的一個;我只需要近似值;請參閱:
How do you test running time of VBA code?
我用最簡單的一個:

Sub my_test() 
Dim t As Single 
t = Timer 
'code 
Call LoopExample 
MsgBox Timer - t 
End Sub 
+0

你是如何測量運行時間的?在excel應用程序中是否有某處可以找到我的代碼的運行時? –

+0

@AdityaGuru:我修改了我的答案;請參閱**編輯#1 ** – houssam

1

其中Application.screenupdating/Application.visible之一(/兩),我應該設置爲假的?

請提供您的答案的理由。

這真的取決於你想要做什麼。讓我解釋。

目的

Application.visible使用,當你不希望用戶看到的應用程序。應用程序是否正在更新並不重要。例如,你可以有一個Login Userform顯示,並且直到用戶輸入正確的信息,你不希望顯示應用..

Application.screenupdating,另一方面有無關的Application本身的知名度。它可以(簡單地說)防止應用程序更新時看到的閃爍。

我應該使用哪一個?

  1. ScreenupdatingFalse,並Application.visibleTrue然後閃爍不會發生
  2. ScreenupdatingTrueApplication.visibleFalse,則閃爍發生,但你不能把它看成是應用程序是隱。
  3. ScreenupdatingTrueApplication.visibleTrue然後閃爍發生,你可以看到它。
  4. ScreenupdatingFalseApplication.visibleFalse時,則閃爍不發生。

因此,如果您擔心性能(代碼執行速度),那麼總是建議將Screenupdating切換爲False

希望這回答你的問題。

+0

「當Screenupdating爲True並且Application.visible爲False時,將發生閃爍,但由於應用程序隱藏,您無法看到它。」---我感覺應用程序不可見畢竟,CPU不會爲更新分配資源,所以我們甚至可能根本不需要screenupdating。這有意義嗎? –

+0

爲什麼不做houssam提到的測試並親自看看? :) –

+0

是的。我會嘗試。謝謝 –