为什么在VBA中使用Range.Formula for Excel 2003而不是Range.Value?

时间:2012-12-03 16:43:33

标签: vba excel-vba excel-2003 excel

我想知道为什么在Excel 2003的VBA代码中我们甚至需要使用Range.Formula 公式写入单元格而不是仅使用Range.Cell?他们都将字符串写入成为论坛的单元格,并且该公式起作用(从我测试过的)。

ActiveCell.Value="=If(True,""yes"",""no"")"

ActiveCell.Formula="=If(True,""yes"",""no"")"

为我做同样的事情(当我选择一个单元格并在单独的单元格中分别执行上述每个代码段时)。它们都在单元格中显示“是”值,并且当我单击以查看每个单元格时存储公式。

我查看了微软开发中心的信息:

Range.Formula Range.Formula Property for Excel 2013 (Excel 2003 did not have a page for this Property)

Range.Value Property for Excel 2003 (Expand the "Value property as it applies to the Range object." heading

我也用谷歌搜索“为什么使用Range.Formula而不是Range.Value VBA Excel”,找不到任何与我的问题有关的内容。

Some people说,请使用Range.Value

其他人说在堆栈溢出时使用Range.Formula(抱歉我丢失了对确切问题的引用...)

2 个答案:

答案 0 :(得分:3)

就数据价值而言:

想象一下,你有整数,双重用于某些计算,如果你使用.formula,你会被搞砸。因为.FORMULA总是返回一个String。 (设置为.formula的任何值都不是普通值而不是公式)除非您的代码中有异常处理和附加功能。而.VALUE会按照您的预期返回数据的数据类型。

在检索公式方面: 价值是设置公式而不是检索的单向途径。

因此,您会看到介绍这些方法的原因,并帮助您使用所需的正确属性。 :-)

答案 1 :(得分:0)

在将实际公式写入单元格时,这不太适用,但是当使用包含多种数据类型的变量数组中的值填充范围时,我发现使用.Formula而不是.Value(特别是非-US date)提供更可靠的结果。

我不记得确切的问题导致我发现这是一种解决方法,因为它是在很多个月前;我也没有测试过以找出实际的差异。一旦我发现了这个好处,我就转换了,从那时起就一直这样做。

猜测我会说使用.Formula属性进行写入会阻止Excel尝试自动转换目标范围内尚未设置数字格式的任何单元格的数字格式(甚至可能用于那些这样做。