2015-05-24 93 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

是的。我会尝试。谢谢 –