Custonfunction适用于整个工作簿而不是单张纸

我使用stream行的自定义function,我在互联网上发现的一个VBA博客。 它读取文本单元格,就好像它是公式(即“= A2 + B2”或“= ABS(A2 + B2)”,我使用CONCATENATE函数创build它们,在工作簿中它们不带引号)。 代码如下:

Function Eval(Ref As String) Application.Volatile Eval = Evaluate(Ref) End Function 

在我的工作簿中,除了2列数据,它们计算一些描述性的统计数据(即总和,平均值,标准差等)外,我的工作簿中有多个完全相同的副本,公式在我的源表中,复制后的表具有如下公式:Eval (sourceSheet!A1),A1包含上面的公式文本。 问题是加载它后应用macros,我需要按F9刷新(有时几次)。 它使刷新所有我复制的工作表与我在工作表中的数据刷新。 所以例如:如果我刷新工作表3和数据总和为5它在所有其他表中总和为5。 我猜不知什么原因,我的代码使function适用于整个工作簿,而不是像其他每个Excel函数单个工作表。

所以我有两个问题:

有什么办法来改变代码,所以我的自定义函数将只适用于我把它放在工作表?

你能发布一个macros代码刷新整个工作簿,只需点击一下鼠标左键?

先谢谢你

这是一个相当错误的UDF:评估始终将不合格的引用作为引用活动工作表。 你真的需要使用Worksheet.Evaluate。 尝试类似这样的假设,任何参考资料中的不合格的参考文献都是参考文献

 Function Eval(Ref As range) Application.Volatile Eval = ref.parent.Evaluate(Ref.value) End Function 

或者如果你想要引用UDF被调用的表单,试试这个

 Function Eval(Ref As variant) Application.Volatile Eval = Application.Caller.Parent.Evaluate(Ref) End Function 

还有一些奇怪的事情/怪癖/错误评估你应该知道的:看我的博客文章https://fastexcel.wordpress.com/2011/11/02/evaluate-functions-and-formulas-fun-如何对化妆擅长评估法,两次作为快速/