问题
I was wondering why in VBA code for Excel 2003 do we even need to use Range.Formula
to write a formula to a cell instead of just using Range.Cell
? They both write Strings to the cell that become forumlas, and the formula works (from what I've tested).
ActiveCell.Value="=If(True,""yes"",""no"")"
and
ActiveCell.Formula="=If(True,""yes"",""no"")"
do the same thing for me (when I select a cell and execute each of the above code segments separately in separate cells). They both show the "yes" value in the cell and the formula is stored when I click to view each cell.
I looked on Microsoft's Dev Center for info:
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
I also googled "Why use Range.Formula instead of Range.Value VBA Excel" and couldn't find anything that related to my question.
Some people said, use Range.Value
.
Some others say use Range.Formula
on stack overflow (Sorry I lost the reference to the exact question...)
回答1:
In terms of values of data:
Imagine you have integers, doubles for certain calculations and if you use .formula you gonna get screwed. Because .FORMULA
always return a String. (Any value set to .formula without is a plain value not a formula) Unless you have exception handling and the extras ready in your code. Whereas .VALUE
returns your data's data type as you expect them to be.
In terms of retrieving formula: Value is one way road in case to set formula but not to retrieve.
So you see these methods are introduced for a reason and help you to work with right properties you require. :-)
回答2:
This doesn't apply so much when writing actual formulas to cells, but I find using .Formula
instead of .Value
when filling a range with values from a variant array containing multiple data types (especially non-US dates) gives much more reliable results.
I can't remember the exact problem that led me to discover this as a workaround, as it was many moons ago; nor have I tested to find out what the actual differences are. I simply switched once I discovered the benefit and have been doing it this way ever since.
At a guess I would say that writing using the .Formula
property prevents Excel from attempting to automatically convert number formats for any cells in the target range which do not already have a number format set (and possibly even for those that do).
来源:https://stackoverflow.com/questions/13687800/why-use-range-formula-in-vba-for-excel-2003-instead-of-range-value