如何在工作簿进行计算之前将Excel计算更改为手动

时间:2018-07-10 18:08:48

标签: excel vba add-in

我正在使用vba为Excel开发一个插件。打开电子表格后,将重新计算所有值,这会减慢打开速度。我尝试创建一个Workbook_open事件,该事件将应用程序的计算从自动更改为手动,但是在完成计算后将执行此事件处理程序。我还尝试在电子表格关闭之前将计算方式设置为手动,以便下次打开时会更快。但是,我的问题是我觉得它对客户具有侵害性。

理想情况下,我想做的是:

  • 电子表格打开后,获取用户的当前计算设置并保存
  • 将计算设置更改为手动,以便电子表格可以快速打开
  • 将计算设置更改回用户的原始设置

我该怎么做?谢谢

1 个答案:

答案 0 :(得分:0)

我创建了2个在需要执行此操作时调用的潜艇,Updates_OffUpdates_On。您将需要在调用子例程中将变量CalcModeIterationModeIterations声明为公共变量,并且只有在退出前重新打开更新后,此变量才有效。如果无法做到这一点,则将需要一些帮助单元格来存储值。

我有if CalcMode=xlCalculationManual语句在开发过程中警告我,我将以手动模式开始或结束,并在需要时取消注释。

Public Sub Updates_Off()

' Turn off Screen updating
    Application.ScreenUpdating = False

' Check what calculation mode is in effect and set current to manual
    CalcMode = Application.Calculation
'   If CalcMode = xlCalculationManual Then _
'       MsgBox "Starting mode is manual"

    IterationMode = Application.Iteration
    Iterations = Application.MaxIterations
    Application.Calculation = xlCalculationManual

End Sub


Public Sub Updates_On()

' Turn on Screen updating
    Application.ScreenUpdating = True

' Reset Calculation mode
    Application.Calculation = CalcMode
    Application.Iteration = IterationMode
    Application.MaxIterations = Iterations

'   If CalcMode = xlCalculationManual Then _
'       MsgBox "Reset to manual mode"

End Sub