6

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

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

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

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

我查看了 Microsoft 的开发中心以获取信息:

Range.Formula Excel 2013 的 Range.Formula 属性(Excel 2003 没有此属性的页面)

Range.Value Excel 2003 的属性(展开“适用于 Range 对象的值属性。”标题

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

有人说,用Range.Value

其他一些人说使用Range.Formula堆栈溢出(对不起,我失去了对确切问题的引用......)

4

2 回答 2

3

在数据价值方面:

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

在检索公式方面:值是设置公式但不检索的一种方式。

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

于 2012-12-03T17:49:19.907 回答
0

这在将实际公式写入单元格时并不适用,但我发现在使用包含多种数据类型(尤其是非美国日期)的变体数组中的值填充范围时使用.Formula而不是.Value提供更可靠的结果。

我不记得导致我发现这是一种解决方法的确切问题,因为那是很多个月前的事了。我也没有测试找出实际差异是什么。一旦我发现了好处,我就简单地切换了,从那以后就一直这样做。

猜测一下,我会说使用该.Formula属性编写会阻止 Excel 尝试为目标范围内尚未设置数字格式的任何单元格自动转换数字格式(甚至可能是那些设置了数字格式的单元格)。

于 2015-03-04T11:36:22.387 回答