何时使用range.value?

Rag*_*ran 7 excel vba

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

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

例如,我应该写

__PRE__

或者我应该写

__PRE__

同样的,

__PRE__

要么

__PRE__

Sid*_*out 10

在Excel Range对象中,默认memberValue

所以SomeVariable = Range("A1")和.一样SomeVariable = Range("A1").Value

同样Range("A1") = SomeVariable如此Range("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
Run Code Online (Sandbox Code Playgroud)

在这种情况下再次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
Run Code Online (Sandbox Code Playgroud)

现在尝试这个

Sub Sample()
    Dim someVariable As Variant

    someVariable = Range("A1").Value

    Debug.Print someVariable
End Sub
Run Code Online (Sandbox Code Playgroud)

编辑:

正如提姆威廉姆斯所说

使用.Value对于"消除歧义"常见的"在分配对象变量时忘记使用Set"问题也很有用 - Dim a:设置a =范围("A1")vs Dim a:a =范围("A1" )在第二种情况下总是使用.Value澄清实际问题 -