Excel vba Application.screenupdating vs Application.visible

Adi*_*uru 2 excel performance vba excel-vba

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

所以,我的问题是 -

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

请提供您的答案的理由.

hou*_*sam 5

我没有直接回答你的问题; 但我认为,设定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
Run Code Online (Sandbox Code Playgroud)

用法示例:

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
Run Code Online (Sandbox Code Playgroud)

此源代码将在18 seconds不使用Call YK_Start和执行的情况下执行Call YK_End; 它将在10 seconds使用这些程序执行.

参考:www.officena.net:阿拉伯语办公论坛.
编辑#1
有很多方法可以衡量代码的执行时间; 我不知道最准确的一个; 我只需要近似值; 请参阅:
如何测试VBA代码的运行时间?
我使用最简单的一个:

Sub my_test()
Dim t As Single
t = Timer
'code
Call LoopExample
MsgBox Timer - t
End Sub
Run Code Online (Sandbox Code Playgroud)