为什么Range.Address()在链接时返回第一个单元格的地址?

时间:2015-01-07 20:32:45

标签: excel vba excel-vba method-chaining

在为an answer撰写this question时,我偶然发现了一些意想不到的行为。

Range次调用链接在一起时,Address始终返回语句中第一个Range对象的地址。例如:

Public Sub Unexpected()

    Debug.Print Range("B3").Address
    Debug.Print Range("B3").Range("A1").Address

End Sub

返回以下输出。

$B$3
$B$3

但我原以为它会在链中返回 last Range对象的地址。

$B$3
$A$1

任何人都可以解释这种行为吗?最好带有相关文档的引用和链接。

1 个答案:

答案 0 :(得分:2)

有关于使用Range().Cells()的文档,表明Cells()将返回给定Range()内相对于Range()左上角单元格的位置。用Range().Range()测试这个理论给出了:

Public Sub Unexpected()

    Debug.Print Range("B1:C3").Range("A1").Address
        '$B$1
    Debug.Print Range("B1:C3").Range("B1").Address
        '$C$1
End Sub

Documentation here

  

当应用于Range对象时,该属性与Range对象相关。

     

例如,如果选择是单元格C3,则Selection.Range("B1")返回单元格D3,因为它与Range属性返回的Selection对象相关。另一方面,代码ActiveSheet.Range("B1")始终返回单元格B1