如何在工作簿进行计算之前将Excel计算更改为手动
我正在使用vba为excel开发外接程序。打开电子表格后,将重新计算所有值,这会减慢打开速度。我已尝试创建一个Workbook_Open事件,将应用程序计算从自动更改为手动,但此事件处理程序在计算完成后执行。我还尝试在电子表格关闭之前将计算设置为手动,以便下次打开时速度更快。但我的问题是,我觉得这对客户来说是一种侵犯 理想情况下,我想做的是: 当电子表格打开时,获取用户的当前计算设置并保存它 将计算设置更改为手动,以便可以快速打开电子表格 将计算设置更改回用户的原始设置如何在工作簿进行计算之前将Excel计算更改为手动,excel,vba,add-in,Excel,Vba,Add In,我正在使用vba为excel开发外接程序。打开电子表格后,将重新计算所有值,这会减慢打开速度。我已尝试创建一个Workbook_Open事件,将应用程序计算从自动更改为手动,但此事件处理程序在计算完成后执行。我还尝试在电子表格关闭之前将计算设置为手动,以便下次打开时速度更快。但我的问题是,我觉得这对客户来说是一种侵犯 理想情况下,我想做的是: 当电子表格打开时,获取用户的当前计算设置并保存它 将计算设置更改为手动,以便可以快速打开电子表格 将计算设置更改回用户的原始设置 我怎样才能做到这一点呢?
我怎样才能做到这一点呢?我创建了两个sub,当我需要执行此操作时,我会调用它们,分别为Updates\u Off和Updates\u On。您需要在调用子中将变量CalcMode、IterationMode和Iterations声明为public,只有在退出之前重新打开更新时,这才有效。如果你不能做到这一点,你需要有一些辅助单元格来存储这些值 我有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
但我的问题是,我觉得这对客户来说确实是一种侵犯。Application.Calculation是应用程序级别的状态,当Excel关闭然后重新打开时,它将被持久化-然后您的客户不一定会意识到他们的工作表不再计算,当他们意识到发生了什么时,他们会责怪您。现在这是一个Excel加载项,因此它将与Excel一起打开,当显示启动屏幕时。工作表与外接程序有何关联,或外接程序有何关联?是外接程序打开工作簿吗?如果您的计算效率低下,将计算切换回自动将导致明显的延迟,那么为什么不解决实际问题而不是修补症状?看看是否可以帮助您找出症结所在IIRC有一个免费演示/预览模式,否则这是一个付费加载项。查尔斯·威廉姆斯(Charles Williams)的博客还提供了大量加速计算的资源。感谢@MathieuGuindon提供这些资源。外接程序提供工作表正在计算的函数。如果您的自定义项可以优化,请将它们放到=