Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Excel vba Application.Screen更新vs Application.visible_Performance_Excel_Vba - Fatal编程技术网

Performance Excel vba Application.Screen更新vs Application.visible

Performance Excel vba Application.Screen更新vs Application.visible,performance,excel,vba,Performance,Excel,Vba,我有一个vba代码,可以将某些单元格从另一个excel工作表复制到活动excel工作表。我希望这项工作能更快地完成 将Application.screenUpdate设置为false比将Application.screenUpdate/Application.visible更改为hidden或同时执行这两项操作更能加快任务的速度吗?我无法直接回答您的问题;但是我认为将Application.visible设置为false不会提高性能;我更喜欢使用以下代码: Public Sub YK_Start

我有一个vba代码,可以将某些单元格从另一个excel工作表复制到活动excel工作表。我希望这项工作能更快地完成


Application.screenUpdate
设置为false比将
Application.screenUpdate/Application.visible
更改为hidden或同时执行这两项操作更能加快任务的速度吗?

我无法直接回答您的问题;但是我认为将
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秒内执行
,无需使用
Call YK_Start
Call YK_End
;并将使用这些过程在
10秒内执行

参考:阿拉伯语办公论坛。
编辑#1
有很多方法可以测量代码的执行时间;我不知道最准确的是什么;我只需要近似值;请参阅:

我使用的是最简单的一个:

Sub my_test()
Dim t As Single
t = Timer
'code
Call LoopExample
MsgBox Timer - t
End Sub
我应该将Application.screenUpdate/Application.visible中的哪一个(/两者)设置为false

请为您的答案提供理由。

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

目的

Application.visible
在您不希望用户看到应用程序时使用。应用程序是否正在更新并不重要。例如,您可能会显示一个
登录用户表单
,在用户输入正确信息之前,您不想显示应用程序

另一方面,屏幕更新与应用程序本身的可见性无关。它可以(简单地说)防止应用程序更新时出现的闪烁

我应该使用哪一个?

  • 屏幕更新
    应用程序可见
    时,不会发生闪烁
  • 屏幕更新
    应用程序可见
    时,会发生闪烁,但由于应用程序被隐藏,您无法看到它
  • 屏幕更新
    应用程序可见
    时,会发生闪烁,您可以看到它
  • 屏幕更新
    应用程序可见
    时,不会发生闪烁

  • 因此,如果您担心性能(代码的执行速度),则建议始终将
    屏幕更新
    切换到
    False

    “当屏幕更新为True,而Application.visible为False时,会发生闪烁,但由于应用程序处于隐藏状态,您无法看到它。”---我觉得由于应用程序根本不可见,CPU根本不会为更新分配资源,所以我们甚至可能根本不需要屏幕更新。这有什么意义吗?为什么不做houssam提到的测试,亲自看看呢?:)对我试试看。ThanksHow您测量了运行时间吗?excel应用程序中是否有我可以找到代码运行时的地方?@AdityaGuru:我修改了答案;请参见编辑#1