标签之间无法解释的重新计算

时间:2015-01-16 10:04:19

标签: excel-vba excel-2010 user-defined-functions volatile vba

我想制作一个工作簿,在第一个选项卡中定义计算和任务,所有其他选项卡都复制这些计算。复制计算的处理应在目标选项卡中进行。我有三个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

1 个答案:

答案 0 :(得分:0)

Application.EvaluateActiveSheet获取其上下文 - 这就是为什么所有公式都返回相同的值。如果按F9,您可以看到它们重新评估为活动表的数据。

如果您想在包含公式的工作表的上下文中评估,请尝试此修复:

Function MyEval(s)
Application.Volatile
    'MyEval = Evaluate(s)
    MyEval = Application.Caller.Parent.Evaluate(s)
End Function