何时使用range.value?

时间:2015-05-29 20:55:18

标签: excel vba excel-vba

这应该很简单,但我找不到明确的答案。

如果我正在读/写一个范围,我什么时候才使用范围名称,什么时候需要使用range.value?范围是一个细胞还是多个细胞是否重要?变量的类型是什么关系?或者范围内的数据类型?这是最好的做法吗?

例如,我应该写

`a = Range("Test")`

或者我应该写

`a = Range("Test").value`

同样,

`Range("Test") = a`

`Range("Test").value = a`

1 个答案:

答案 0 :(得分:9)

在Excel Range对象中,默认memberValue

因此SomeVariable = Range("A1")SomeVariable = Range("A1").Value

相同

同样Range("A1") = SomeVariableRange("A1").Value = SomeVariable

相同

当你说a = Range("Test")

时,你当然要小心

当您尝试将值从连续范围存储到Variant变量时,例如Test范围指的是A1:A10,那么您将得到一个值数组

Sub Sample()
    Dim Myar

    Myar = Range("A1:A10").Value

    Debug.Print UBound(Myar)
End Sub

在这种情况下,Myar = Range("A1:A10").Value再次与Myar = Range("A1:A10")

相同
  

如果我正在阅读/写入某个范围,我何时只使用范围名称,何时需要使用range.value?

我不确定when do I just use the range name你是什么意思,但是当你从一个范围读/写时,如果你使用.Value则不重要。恕我直言,最好使用.Value:)

  

范围是一个细胞还是多个细胞是否重要?

如果您使用.Value,即使在这种情况下也不重要。

  

变量的类型是什么关系?

哦,是的!请参阅上面的数组示例

  

或范围内的数据类型?

Excel单元格可以存储各种类型的数据。从数字到日期到字符串。由于您不知道该类型可以是什么,因此建议您在使用它们时使用Variant。这是一个经典的例子

让我们说单元格A1有这个数字123456789

现在试试这段代码

Sub Sample()
    Dim someVariable As Integer

    someVariable = Range("A1").Value

    Debug.Print someVariable
End Sub

现在试试这个

Sub Sample()
    Dim someVariable As Variant

    someVariable = Range("A1").Value

    Debug.Print someVariable
End Sub

修改

如蒂姆·威廉姆斯所说

  

使用.Value对于“消除歧视”也很有用。常见的&#34;忘记在分配对象变量时使用Set&#34;问题 - 昏暗a:设置a =范围(&#34; A1&#34;)vs Dim a:a =范围(&#34; A1&#34;)在第二种情况下,总是使用.Value澄清实际问题 - < / p>