更改另一个工作簿上的值时,Application.Volatile不重新计算函数

时间:2019-02-06 16:40:31

标签: excel vba

我有一本Excel工作簿,它在三个用户定义的函数中使用Application.Volatile。下面是其中一个功能的示例,其他两个功能非常相似。他们所做的只是在指定的工作表上找到一个值,然后将该值返回到摘要工作表。

test_check

当最终用户只有使用该功能的工作簿处于打开状态时,该功能将按预期工作。工作簿的计算选项设置为“自动”。

当用户更改单元格值或保存另一个工作簿时,就会出现问题。这些工作簿与具有用户定义功能的工作簿无关。当用户使用功能重新激活工作簿时,所有用户定义的功能均返回#VALUE错误。按F9或重新计算工作表将删除所有错误并返回正确的值。

有没有办法防止此问题的发生?

1 个答案:

答案 0 :(得分:0)

Worksheets(Name)缺少对其工作簿的引用。如果您未引用该工作簿,则Excel会假设ActiveWorkbook是具有焦点/位于最上方的那个。这就是用户切换到的工作簿,它可能没有名为Name的工作表,因此您的函数出错并返回#VALUE

引用ThisWorkbook,这是代码运行所在的工作簿。

ThisWorkbook.Worksheets(Name)