【发布时间】:2017-06-01 15:42:21
【问题描述】:
我遇到了一个问题,即公式没有更新(我特意进行了手动计算)。特别是,它们是具有一些复杂依赖关系的公式。
Cell1: "=Cell2"
Cell2: "IFERROR(FindData(X1, X2))"
FindData 是我编写的 VBA 函数,它在预定义的范围 (RangeXYZ) 上使用 Index(Match(X1),Match(X2))。
该范围具有许多连接到外部数据服务的公式(不是 excel 数据连接,只是另一个自定义 vba 公式)。
当我计算 Cell1 时,Excel 不会计算任何下游的东西。我需要一种方法让它强制计算 RangeXYZ,然后重新计算 Cell2,然后重新计算 Cell1。
谢谢
编辑:我已经有了,工作表 Cell1 包含在:
Private Sub Worksheet_Calculate()
Application.calculatefull
End Sub
但我发现这以无限循环的计算结束。我也尝试过指定工作表 Sheets("Sheet1").Calculate,但这似乎不起作用。
确实有效的 Ctrl-Alt-F9 有点矫枉过正并且需要太多时间。
【问题讨论】:
-
也许尝试把
Application.Volatile = True作为FindData的第一行? -
只需
Application.Volatile,不需要。 -
但请注意,Application.Volatile 会在每次重新计算工作表时重新计算,而不仅仅是在输入范围更改时。这可能适用于您的情况,因为您有手动计算,但
Application.Volatile到目前为止还不是万灵药,只能谨慎使用。 -
@keynesiancross :
Enable iterative calculation我的错,见support.office.com/en-us/article/… -
理想情况下,您应该将查找范围作为参数传递给 UDF。那么它就不需要是易变的。