【发布时间】:2015-01-16 10:04:19
【问题描述】:
我想制作一个工作簿,其中计算和任务在第一个选项卡中定义,所有其他选项卡都复制这些计算。复制计算的处理应在目标选项卡中进行。我有三个 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
第一个选项卡称为“定义”,第二个选项卡称为“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 中当然没有值,因为我从来没有在那里放任何值。 Michel Tab 中的“12”从何而来???
但它变得更有趣了。当我将值放入 Michel 选项卡(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
【问题讨论】:
-
请添加一些截图
标签: excel excel-2010 user-defined-functions volatile vba