如何将应用程序计算设置回用户在Excel VBA中定义的?

joh*_*s32 5 excel vba excel-vba calculation

我有一个相当大的工作簿,有些用户喜欢自动计算,而其他人则喜欢将其关闭.

与工作表交互的一些宏被附加到工作簿.为了加快我的VBA代码,我设置了

Application.Calculation = xlManual
Run Code Online (Sandbox Code Playgroud)

在每个工作簿的开头.

我的问题是,如何将其恢复到宏观结束时的状态?

现在我正在使用

Application.Calculation = xlAutomatic
Run Code Online (Sandbox Code Playgroud)

但这会覆盖用户的选择.每次宏运行时都必须将其更改回手动,这非常烦人.(或者相反,如果将其保留在手册中.)

Car*_*rol 5

开始前存储设置,完成后恢复:

Sub calctest()
Dim calcsetting As Integer

    calcsetting = Application.Calculation
    ' Put code here
    Application.Calculation = calcsetting
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 您可能还想使用错误处理来恢复计算,即使您的其他代码失败 (4认同)
  • @carol @johs32 `calcsetting` 应该至少是 `Long` 类型或更好的类型 [`XlCalculation`](https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlcalculation- enumeration-excel?f=255&MSPPError=-2147217396)(它还为此变量启用了智能感知)。如果您执行 `Debug.Print VarType(Application.Calculation)`,您可以看到这一点,它将是 `3`,这意味着 `Long`(根据 [VarType Function](https://msdn.microsoft.com/en- us/vba/language-reference-vba/articles/vartype-function))。最佳实践:[避免整数并始终使用长整数](/sf/answers/1848666431/)。 (2认同)