我想制作一个工作簿,在第一个选项卡中定义计算和任务,所有其他选项卡都复制这些计算。复制计算的处理应在目标选项卡中进行。我有三个UDF:
Function IsFormula(cell_ref As Range)
Application.Volatile
IsFormula = cell_ref.HasFormula
End Function
Function ShowF(Rng As Range)
Application.Volatile
ShowF = Rng.Formula
End Function
Function MyEval(s)
Application.Volatile
MyEval = Evaluate(s)
End Function
第一个标签名为' Definitions',第二个标签名为' Dion'第三个' Michel'。现在这就是我用来复制计算的内容:
=IF(Definitions!C5<>"";IF(IsFormula(Definitions!C5);myeval(Showf(Definitions!C5));Definitions!C5);"")
有效。现在是有趣的部分。
假设我想使用SUM公式。我将它添加到“定义”选项卡中,它可以在Dion选项卡中使用。我可以在一列中填充多个单元格(比如C10 = 3,C11 = 4,C12 = 5)并将它们相加(12)。现在,当我切换到Michel Tab时,我看到相同的值(12),但当然没有C10,C11和C12中的值,因为我从未在其中放置任何值。 &#39; 12&#39;在Michel Tab中来自???
但它变得更有趣。当我在Michel Tab中的单元格中放置值(C10 = 30,C11 = 40,C12 = 50)时,它将值12更改为120.正确。现在我切换回Dion Tab,12改为120!当然C10,C11和C12也没有在那里进行修改。
这种行为是期待的吗?
如果您想要获得Excel表格的副本,请给我发消息。我可以想象你会想看到它来理解它。
干杯, 马亭
我有Office Professional Plus 2010,Excel版本14.0.7128.5000
答案 0 :(得分:0)
Application.Evaluate
从ActiveSheet
获取其上下文 - 这就是为什么所有公式都返回相同的值。如果按F9,您可以看到它们重新评估为活动表的数据。
如果您想在包含公式的工作表的上下文中评估,请尝试此修复:
Function MyEval(s)
Application.Volatile
'MyEval = Evaluate(s)
MyEval = Application.Caller.Parent.Evaluate(s)
End Function