我有一个自定义Excel函数,运行时间很长。我想在工作簿中保持自动公式计算打开,但只有在将单元格切换为TRUE时才计算此特定公式(如果可以通过VBA以某种方式切换公式也可以)。我看到的一个建议是将函数调用 Package 在IF()语句中。例如,假设公式位于单元格A1
中,公式的参数位于单元格A2中,TRUE/FALSE触发器位于单元格A3
中。那么A1
中的公式如下所示=IF(A3, MYFUNC(A2), A1)
如果A3==TRUE
,则计算MYFUNC(A2)
,否则将返回单元格的现有值。然而,我发现这样做的问题是,如果我将A3
从TRUE切换到FALSE,然后再切换回TRUE,那么MYFUNC()
总是会重新求值,即使它的输入A2
没有改变。我在工作簿的不同部分对MYFUNC()
进行了多次调用,由于执行该函数非常耗时,因此我只希望在其中一个输入发生更改时执行该函数。请注意,虽然这里MYFUNC()
接受单个标量输入,但实际上它可能会变得更复杂,并接受多个范围作为输入。
1条答案
按热度按时间bvpmtnay1#
实际上,我认为这是出乎意料的,你并不真的想要一个自定义函数,但是
Function
切换到VBAPublic Sub MyFunc(..
这可能会表现得更像用户期望的方式
如果您 * 必须 * 拥有
Function
,请考虑通过添加专用检查在内部将其短路使用一些默认参数来使其更易于使用(我建议将触发器设置为必需的,但还是更喜欢使用纯VBA和宏来触发它)
这样做的一个优点是,您可以添加一个额外的列(或Range,它专用于一些更大或更小的Range?)来触发单独的计算,同时还防止重新计算
MYFUNC()
的每个示例(如果A2设置为False,则撤消已经完成的工作)对不起,我没有Excel的副本来测试这一点,但我愿意改进!