更改另一个工作簿上的值时,Application.Volatile 不会重新计算函数
Posted
技术标签:
【中文标题】更改另一个工作簿上的值时,Application.Volatile 不会重新计算函数【英文标题】:Application.Volatile not recalculating functions when values on another workbook are changed 【发布时间】:2019-02-06 16:40:30 【问题描述】:我有一个在三个用户定义的函数中使用 Application.Volatile 的 Excel 工作簿。下面是其中一个功能的示例,其他两个非常相似。他们所做的只是在指定的工作表上找到一个值并将该值返回到一个汇总工作表。
Function estimated_commission(client As Range) As Double
Application.Volatile
Name = CStr(client.Value)
pull_value = Worksheets(Name).Range("A500").End(xlUp).Offset(0, 5).Value
estimated_commission = pull_value
End Function
当最终用户只打开使用这些函数的工作簿时,该函数按我的预期工作。工作簿的计算选项设置为自动。
当用户更改单元格值或保存另一个工作簿时,就会出现问题。这些工作簿与具有用户定义函数的工作簿无关。当用户使用函数重新激活工作簿时,所有用户定义的函数都返回 #VALUE 错误。按 F9 或重新计算工作表将删除所有错误并返回正确的值。
有没有办法防止这个问题发生?
【问题讨论】:
【参考方案1】:Worksheets(Name)
缺少对其工作簿的引用。如果您不引用工作簿,Excel 会假定 ActiveWorkbook
是具有焦点 / 位于顶部的那个。这就是用户切换到的工作簿,它可能没有名为Name
的工作表,因此您的函数错误并返回#VALUE
。
引用ThisWorkbook
,这是代码正在运行的工作簿。
ThisWorkbook.Worksheets(Name)
【讨论】:
这么愚蠢的错误...感谢您的快速回复,完美!以上是关于更改另一个工作簿上的值时,Application.Volatile 不会重新计算函数的主要内容,如果未能解决你的问题,请参考以下文章