我有一个我已经实现为VBA模块的函数,它将一个单元格作为参数并查询Web服务以返回结果。由于数据源是远程的,此功能可能需要几秒钟才能返回。
问题是某些操作(例如删除任何列)似乎会导致每个公式重新计算,即使不需要进行任何更改也是如此。当我的工作表有几百行时,这可能需要几分钟,在此期间Excel没有响应。
我想找到一些方法来检测不需要进行任何更改并跳过此步骤。我试过的一些事情:
有没有办法阻止某些操作更新工作表上的每个公式?
其他要求:
答案 0 :(得分:2)
我会
通过将文件/选项/公式/工作簿计算设置为“手动”系统地阻止重新计算,并关闭“保存时重新计算”
创建Private Sub Worksheet_Change(ByVal Target As Range)
并确定应在何种情况下重新计算(Target.Worksheet.Calculate
) - 例如,确定目标的坐标(使用Target.Column
和{{ 1}}),并从Worksheet_Change触发器内部调用查询。
最终我会将重新计算指令放在它自己的Sub中,并在工作表中创建一个按钮,这样用户可以 - 按照他/她的意愿 - 手动触发重新计算(以防万一F9键不重复)用户已知)
使用全局布尔变量Target.Row
也是可以想象的,它由Worksheet_Change触发器need_Query
(=参数)设置并且具有查询功能检查(和重置)布尔值,并仅在查询中If Target.Row = X And Target.Column = Y
,否则退出而不执行操作。确保在工作表加载时将need_Query设置为FALSE。
最后,您可以将查询函数转换为If need_Query Then
,并在Worksheet_Change触发器中制定一些更复杂的条件来触发它(例如,如果某个列发生更改等)。