当我使用Range1.Range2时,我使用Range2来扩展或收缩Range1。在尝试回答问题时,我遇到了Range2与Range1无关的用法。我认为这会返回一个错误,但它返回了一个我不理解的地址。
这个宏:
Sub Test()
Debug.Print Range("A2").Range("B1").Address
Debug.Print Range("B3").Range("B5").Address
Debug.Print Range("C4").Cells(10, 5).Address
Debug.Print Range("D5").Cells(10, 15).Address
Debug.Print Range("D5:F10").Cells(10, 15).Address
Debug.Print Cells(5, 6).Cells(12, 15).Address
Debug.Print "======"
' Specifying the sheet does not seem to affect the result
Debug.Print Range("B3").Cells(15, 1).Address
Debug.Print ActiveSheet.Range("B3").Cells(15, 1).Address
Debug.Print Sheets("Sheet1").Range("B3").Cells(15, 1).Address
End Sub
生成此输出:
$B$2
$C$7
$G$13
$R$14
$R$14
$T$16
======
$B$17
$B$17
$B$17
在我执行的所有类型的测试中,它显示出来:
Range1.Range2
相当于:
Cells(Range1.Row + Range2.Row - 1, Range1.Column + Range2.Column - 1)
我希望我不会遇到DOH时刻,但有人能够提供解释吗?
我正在使用Excel 2003.其他版本的用户是否从此宏获得相同的输出?
答案 0 :(得分:4)
如下MSDN:
当Range应用于Range对象时,该属性相对于Range对象。例如,如果选择是单元格C3,则Selection.Range(“B1”)返回单元格D3,因为它相对于Selection属性返回的Range对象。
正如@Tony注意到的,Range.Range
的行为与Offset.Resize
非常相似,即Range("C3").Range("B1:C3").Address
返回的地址与Range("C3").Offset(0, 1).Resize(3, 2).Address
- $D$3:$E$5