Excel VBA性能编码设置

Excel VBA性能编码设置,vba,excel,Vba,Excel,我一直在研究如何在ExcelVBA中加速我的代码,我遇到了以下非常有用的设置。我的问题是:是否可以将以下代码行设置为一个变量,我可以将其设置为开或关以激活整个列表?例如 speedUpCode = On 将设置以下所有设置,如果设置为Off,则会将以下所有设置反转为True/xlCalculationAutomatic With Application .ScreenUpdating = False .DisplayStatusBar = False .Calculat

我一直在研究如何在ExcelVBA中加速我的代码,我遇到了以下非常有用的设置。我的问题是:是否可以将以下代码行设置为一个变量,我可以将其设置为开或关以激活整个列表?例如

speedUpCode = On
将设置以下所有设置,如果设置为Off,则会将以下所有设置反转为True/xlCalculationAutomatic

With Application
    .ScreenUpdating = False
    .DisplayStatusBar = False
    .Calculation = xlCalculationManual
    .EnableEvents = False
End With
ActiveSheet.DisplayPageBreaks = False 'note this is a sheet-level setting

你可以用一个函数来做这件事,就像这样

Function speedUpCode(sStatus As String)

    If sStatus = "On" Then
      With Application
         .ScreenUpdating = False
         .DisplayStatusBar = False
         .Calculation = xlCalculationManual
         .EnableEvents = False
      End With

    ActiveSheet.DisplayPageBreaks = False 'note this is a sheet-level setting

Else if sStatus = "Off" then

    With Application
        .ScreenUpdating = True
        .DisplayStatusBar = True
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
    End With

    ActiveSheet.DisplayPageBreaks = True 'note this is a sheet-level setting

 End Function
然后,您可以使用这些来打开和关闭

  speedUpCode "On"
  speedUpCode "Off"
但是,请记住,您正在打开和关闭设置-在更改它们之前,您可能应该检查这些设置的状态,以便您可以将它们重置为原始设置,而不仅仅是再次关闭它们
您可以使用静态变量来执行此操作。

您可以使用函数来执行此操作,如下所示

Function speedUpCode(sStatus As String)

    If sStatus = "On" Then
      With Application
         .ScreenUpdating = False
         .DisplayStatusBar = False
         .Calculation = xlCalculationManual
         .EnableEvents = False
      End With

    ActiveSheet.DisplayPageBreaks = False 'note this is a sheet-level setting

Else if sStatus = "Off" then

    With Application
        .ScreenUpdating = True
        .DisplayStatusBar = True
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
    End With

    ActiveSheet.DisplayPageBreaks = True 'note this is a sheet-level setting

 End Function
然后,您可以使用这些来打开和关闭

  speedUpCode "On"
  speedUpCode "Off"
但是,请记住,您正在打开和关闭设置-在更改它们之前,您可能应该检查这些设置的状态,以便您可以将它们重置为原始设置,而不仅仅是再次关闭它们 您可以使用静态变量执行此操作

我使用这个(非常基本):

使用
True
或无参数调用以加快速度,然后使用
False
重置

上面关于可能捕获各种设置的当前状态以便您可以返回到“原始”状态的评论,以及并非所有设置都适合根据您所做的操作进行更新的评论都值得考虑。

我使用此选项(非常基本):

使用
True
或无参数调用以加快速度,然后使用
False
重置



上面关于可能捕获各种设置的当前状态以便您可以返回到“原始”状态的评论,以及并非所有设置都适合根据您正在执行的操作进行更新的评论都值得考虑。

Colin,欢迎来到S.O.您可能想看看有多少人在聊天,讨论如何修补VBA的后端。大多数人只需调用包含此代码的sub即可。您可以将true或false作为参数传递,并以这种方式打开/关闭它。您可以将代码包装在子函数或函数中。然后,您可以根据需要调用它。一次设置所有这些(无论是否在sub内部)都有问题,因为有时您可能需要
。例如,ScreenUpdate=False
,但
。EnableEvents=True
。也就是说,一般来说,在您的列表中,
.ScreenUpdate、.DisplayStatusBar和.DisplayPageBreaks
都可以一起设置-但即使如此,有时您可能需要状态栏来显示消息…我感谢您的帮助!谢谢大家!科林,欢迎来到S.O.你可能想看看那里有很多人在谈论如何修补VBA的后端。大多数人只需调用包含此代码的sub即可。您可以将true或false作为参数传递,并以这种方式打开/关闭它。您可以将代码包装在子函数或函数中。然后,您可以根据需要调用它。一次设置所有这些(无论是否在sub内部)都有问题,因为有时您可能需要
。例如,ScreenUpdate=False
,但
。EnableEvents=True
。也就是说,一般来说,在您的列表中,
.ScreenUpdate、.DisplayStatusBar和.DisplayPageBreaks
都可以一起设置-但即使如此,有时您可能需要状态栏来显示消息…我感谢您的帮助!谢谢大家!从技术上讲,这是可行的,如果
speedUpCode
处于
打开状态,它将在
工作表\u Change
事件中中断。代码不会像预期的那样运行。我只是包括了他想要更改的设置,如果你想加快代码的速度,你可能不会在那个时候寻找用户交互也许。。。但这是一个非常需要的警告,以防OP不知道可能会产生什么影响。感谢您的回复和评论!我知道这个话题已经很老了,但也许我的评论会对某些人有所帮助:今天我注意到,有时(对于非常短的快速宏,当你想让它们更“流畅”)启用/禁用DisplayStatusBar会降低宏的速度。因此,请确保进行一些测试,例如使用循环。从技术上讲,这是可行的,但如果
speedUpCode
处于
开启状态,它将在
工作表\u Change
事件中中断。代码不会像预期的那样运行。我只是包括了他想要更改的设置,如果你想加快代码的速度,你可能不会在那个时候寻找用户交互也许。。。但这是一个非常需要的警告,以防OP不知道可能会产生什么影响。感谢您的回复和评论!我知道这个话题已经很老了,但也许我的评论会对某些人有所帮助:今天我注意到,有时(对于非常短的快速宏,当你想让它们更“流畅”)启用/禁用DisplayStatusBar会降低宏的速度。所以一定要做一些测试,例如使用循环。虽然你说它是基本的,但这对我帮助很大,因为我正在努力学习布局代码的最佳方法。虽然你说它是基本的,但这对我帮助很大,因为我正在努力学习布局代码的最佳方法。