【问题标题】:Unexplainable recalculations across tabs无法解释的跨选项卡重新计算
【发布时间】: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”从何而来???

但它变得更有趣了。当我将值放入 M​​ichel 选项卡(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


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,这给了我更多信息。但是,建议的功能不起作用,我得到#VALUE!在调用该函数的所有单元格中。此外,F9 适用于活动选项卡,但它会更改所有其他选项卡上的值。
  • 在我的测试中,包含父工作表上下文的更改有效:我无法判断您的情况有什么不同。您是说在我的示例中使用 F9,还是使用您的原始代码?
  • 我在原始代码中使用了 F9。从本质上讲,F9 完全符合“Application.Volatile”的功能,但随后是手动的,至少在我的工作表中是这样。您是否知道一种手动重新计算活动选项卡的方法,而只有活动选项卡?这可能是一种解决方法......不是很好,但是嘿......
  • 我确实相信您的第二个建议是可行的方法,但是它不起作用。我会试着找出到底出了什么问题。
  • 好的,当我将其剥离为 =myeval("=SUM(C11:C16)") 时,它会返回 #VALUE!。 C11 到 C16 包含整数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多