【发布时间】:2013-07-18 17:07:33
【问题描述】:
考虑以下sn-p。它将相同的公式写入两个单元格A1 和A2
Sub Main()
With Range("A1")
.Formula = "=1+1"
End With
With Range("A2")
.Formula = "=1+1"
.Value = .Value
End With
End Sub
第二个with 块使用.Value = .Value 计算/执行公式,因此公式从公式栏中消失。请参阅 hiding formulas from formula bar 以获得支持性参考。
现在,用块添加另一个
With Range("A3")
.Formula = "=1+1"
End With
Range("A4") = Evaluate(Range("A3").Formula)
您将公式添加到单元格 A3,然后新单元格的公式将 Evaluated() 放入另一个单元格 A4。结果如图所示
我认为上述类型表明.Value = .Value 和Evaluate() 做同样的事情。
但是,下面的代码使用上述两种方法从关闭的工作簿中提取值。我为此示例创建了一个工作簿book9.xlsm,并在单元格A1 中添加了hello。 book9.xlsm 是我要从中提取A1 值的那个。考虑代码
Sub PullValue()
With Range("A1")
.Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
End With
With Range("A2")
.Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
.Value = .Value
End With
Range("A3").Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
Range("A4") = Evaluate(Range("A3").Formula)
End Sub
第一个with 块将公式放入单元格的A1 值中,来自book9.xlsm。它被执行,因此拉取的值为hello,但公式栏显示实际的.Formula,即C:\...。
第二个with 块使用上面演示的.Value = .Value 来评估公式并通过将公式替换为结果来隐藏公式。
Range("A3") 与第一个 with 块相同。
现在(A4)我遵循与第一个示例相同的原则(此问题中的第一个 sn-p)到Evaluate() 公式但是这次它不起作用。
请查看每个激活的单元格值和公式栏
所以现在,我不能说.Value = .Value 等于Evaluate()。
Evalutate() 的评论说可以和公式一起使用。但在我展示的示例中它不起作用。
Evaluate() 中用作参数的公式是否受到限制?我一直认为 Evaluate 非常强大,但事实证明.Value = .Value 实际上更强大。尽管它们非常相似,但它们在某种程度上有所不同(但我认为这可能是我的错,因为我为此示例选择的公式可能受到限制或限制)。我想我已经展示了是什么让它们同时相似和不同。它仍然像 50%/50%,我无法准确判断它们是否相同。如果有人能够解释这里缺少什么,那就太好了。
【问题讨论】:
-
@lori_m 我已经回滚了你的编辑。请不要从根本上改变帖子的含义,特别是如果您只是“猜测”问题是什么。有关详细信息,请参阅this meta discussion。
-
Evaluate() 当引用的单元格在一个封闭的工作簿中时,恐怕会失败。如果您打开参考的书,那么它会再次正常工作。这是 Evaluate 函数的工作方式,它无法从合上的书中读取。
标签: excel function vba comparison evaluate