Excel VBA Application.screenupdating与Application.visible

我有一个VBA代码,从另一个Excel表复制某些单元格到活动的Excel表单。 在这里,用户不需要看到处理,甚至是Excel应用程序窗口,直到工作完成,我希望工作更快。 我通过互联网阅读了一些博客,指出将Application.screenupdating设置为false会加快任务的速度。

所以,在这里我的问题是 –

我应该将Application.screenupdating / Application.visible中的哪一个(/两者)设置为false? 我的理解是,两个属性可以增加vba任务的输出量,尽pipe当用户应该查看应用程序时使用screenupdating属性,而不是在需要时才使用更新,但是当用户不需要查看时使用可见属性窗户。 我相信设置一个属性为false可能不需要设置另一个为false。

请提供您的答案的理由。

我对你的问题没有直接的回答。 但我认为将Application.visible设置为false将不会提高性能; 我更喜欢使用下面的代码:

 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内执行。

参考: http://www.officena.net :阿拉伯办公室论坛。
编辑#1
测量代码执行时间的方法有很多种, 我不知道最准确的一个; 我只需要近似值; 看到:
你如何testingVBA代码的运行时间?
我正在使用最简单的一个:

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

我应该将Application.screenupdating / Application.visible中的哪一个(/两者)设置为false?

请提供您的答案的理由。

这真的取决于你想要做什么。 让我解释。

目的

当不希望用户看到应用程序时,使用Application.visible。 应用程序是否正在更新是不重要的。 例如,您可能会显示一个Login Userform ,在用户input正确的信息之前,您不想显示该应用程序。

另一方面, ApplicationApplication本身的可见性无关。 它在那里(简单地说)是防止应用程序正在更新时看到的闪烁。

我应该使用哪一个?

  1. ScreenupdatingFalse ,并且Application.visibleTrue ,闪烁不会发生
  2. ScreenupdatingTrue ,并且Application.visibleFalse ,闪烁发生,但由于应用程序隐藏,无法看到它。
  3. ScreenupdatingTrue ,并且Application.visibleTrue ,闪烁发生,您可以看到它。
  4. ScreenupdatingFalse ,并且Application.visibleFalse ,闪烁不会发生。

因此,如果您担心性能(代码执行速度),则始终build议将Screenupdating切换为False

希望这回答你的问题。