【发布时间】:2021-05-04 05:43:42
【问题描述】:
我正在使用 vba 为 excel 开发一个插件。打开电子表格后,会重新计算所有值,这会减慢打开速度。我尝试创建一个 Workbook_Open 事件,将应用程序计算从自动更改为手动,但是在计算完成后执行此事件处理程序。我还尝试在电子表格关闭之前将计算设置为手动,这样下次打开它会更快。不过,我的问题是我觉得它对客户有侵犯性。
理想情况下我想做的是:
- 当电子表格打开时,获取用户当前的计算设置并保存
- 将计算设置更改为手动,以便快速打开电子表格
- 将计算设置改回用户的原始设置
我该怎么做?
【问题讨论】:
-
“我的问题是我觉得它对客户是有侵略性的”——确实如此。
Application.Calculation处于 应用程序级 状态,并且在 Excel 关闭然后重新打开时将保持不变 - 然后您的客户不一定会意识到他们的工作表不再计算,并且会在他们时责备您意识到发生了什么。 -
现在这是一个 Excel 加载项,因此在显示初始屏幕时它会与 Excel 一起打开。 “工作表”与“加载项”有何关联,或者加载项有何关联?是打开工作簿的加载项吗?如果您的计算效率低下,将计算切换回自动会导致显着延迟无论如何,那么为什么不解决实际问题而不是修补症状呢?
-
看看FastExcel 是否可以帮助找出痛点是什么(IIRC 有一个免费的演示/预览模式,否则它是一个付费加载项)。 Charles Williams 的博客也有大量资源可以加快计算速度。
-
感谢@MathieuGuindon 提供的资源。加载项提供了工作表正在计算的函数。
-
看看你的UDF是否可以优化,把它们放到Code Review =)