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

Excel Application.Volatile在更改另一工作簿上的值时不重新计算函数,excel,vba,Excel,Vba,我有一个excel工作簿,在三个用户定义的函数中使用Application.Volatile。下面是其中一个函数的示例,其他两个函数非常相似。他们所做的只是在指定的工作表上查找一个值,然后将该值返回到摘要工作表 Function estimated_commission(client As Range) As Double Application.Volatile Name = CStr(client.Value) pull_value = Worksheets(Na

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

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 error。按F9键或重新计算工作表将删除所有错误并返回正确的值

是否有办法防止出现此问题?

工作表(名称)
缺少对其工作簿的引用。如果您不引用工作簿,Excel将假定
ActiveWorkbook
,它是最上面有焦点/的工作簿。这就是用户切换到的工作簿,它可能没有名为
Name
的工作表,因此您的函数会出错并返回
#VALUE

请参考
此工作簿
,该工作簿是运行代码的工作簿

ThisWorkbook.Worksheets(Name)
工作表(名称)
缺少对其工作簿的引用。如果您不引用工作簿,Excel将假定
ActiveWorkbook
,它是最上面有焦点/的工作簿。这就是用户切换到的工作簿,它可能没有名为
Name
的工作表,因此您的函数会出错并返回
#VALUE

请参考
此工作簿
,该工作簿是运行代码的工作簿

ThisWorkbook.Worksheets(Name)

这么愚蠢的错误。。。感谢您的快速回复,工作完美!这么愚蠢的错误。。。感谢您的快速回复,工作完美!