考虑以下代码段。它将相同的公式写入两个单元格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
计算/执行公式,因此公式从公式栏中消失。请参阅从公式栏中隐藏公式以获得支持性参考。
现在,添加另一个 with 块
With Range("A3")
.Formula = "=1+1"
End With
Range("A4") = Evaluate(Range("A3").Formula)
您将公式添加到单元格A3
,然后该新单元格的公式将Evaluated()
进入另一个单元格A4
。结果如图
我认为上述类型表明.Value = .Value
并Evaluate()
做同样的事情。
但是,下面的代码使用上述两种方法从封闭的工作簿中提取值。我book9.xlsm
为此示例创建了一个工作簿,其中包含一个hello
放入单元格 A1。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
从 a 放入单元格的值中book9.xlsm
。它被执行,因此拉取的值是hello
,但公式栏显示的是实际.Formula
值C:\...
。
第二个with
块使用.Value = .Value
上面演示的公式评估公式并通过将公式替换为结果来隐藏公式。
Range("A3") 与第一个with
块相同。
现在(A4
)我遵循与第一个示例(此问题中的第一个片段)相同的原则,Evaluate()
但是这次它不起作用。
请查看每个激活的单元格值和公式栏
所以现在,我不能说.Value = .Value
等于Evaluate()
。
Evalutate()的注释说它可以与公式一起使用。但在我展示的示例中它不起作用。
用作参数的公式是否Evaluate()
受到限制?我一直认为 Evaluate 非常强大,但事实证明它.Value = .Value
实际上更强大。尽管它们非常相似,但它们在某种程度上有所不同(但我认为这可能是我的错,因为我为此示例选择的公式可能受到限制或限制)。我想我已经展示了是什么让它们同时相似和不同。它仍然像 50%/50%,我无法准确判断它们是否相同。如果有人能够解释这里缺少什么,那就太好了。