自动重新评估非易失性 UDF
Posted
技术标签:
【中文标题】自动重新评估非易失性 UDF【英文标题】:Re-evaluate non volatile UDF automatically 【发布时间】:2015-09-15 08:11:27 【问题描述】:假设,我们有以下非易失性 UDF:
Function Twice(ByRef x As Double) As Double
Application.Volatile False
Twice = 2 * x
End Function
我们在单元格A1
中输入,参考单元格A2
,即在A1
中我们输入:
= Twice(A2)
此外,我们在A2
中放入了随机函数,即在A2
中我们放入了:
=RAND()
现在,如果我们重新计算工作表(例如,通过按 Shift + F9),单元格 A2
中的值将会改变,但 UDF不会更新,即使其引用已更改。
当它的参考值改变时,我们如何使这个UDF自动更新(即不按Ctrl+Alt+F9)? p>
【问题讨论】:
按照@pnuts 的建议删除Application.Volatile False
行,并将工作簿的计算设置为自动而不是手动
@pnuts 不明确声明 Application.Volatile False
与声明它相同,因为它是默认设置。我只是把它放在这里是为了明确表示我不希望函数是易变的。
将 x 定义为 Variant
。
请不要更改编辑。您的问题标题不应包含描述。帖子区域就是为此。
@pnuts 我希望 UDF 仅在它所引用的单元格中的值(在示例单元格 A2 中)更改时才更改。我不希望它发生变化,比如单元格 A3 中的值发生变化,如果函数是 volatile 会发生这种情况。
【参考方案1】:
当您将 Application.Volatile False 与引用 volatile 公式的 Double 参数一起使用时,我认为这是一个错误。
如果您删除 Application.Volatile False 语句,它可以正常工作。
见https://fastexcel.wordpress.com/2011/09/05/false-volatility-is-this-a-bug/ 有关此问题的更详细讨论以及有关原因的推测。
【讨论】:
感谢您的回答。此解决方案(以及将参数定义为变体)已在 cmets 中提供给 OP,但我会接受您的回答以结束此问题,因为它提供了更多详细信息并承认这种“奇怪”行为。以上是关于自动重新评估非易失性 UDF的主要内容,如果未能解决你的问题,请参考以下文章