当选中整行时,为什么Selection.EntireColumn.Address返回行引用?

如果我手动select一个任意的行,比如4:4 ,然后在“立即”窗格中使用:

 ?Selection.EntireColumn.Address $1:$1048576 

这不是我期待的专栏文章。

但是,如果手动select一个任意的列,说D:D ,然后在即时窗格中使用:

 ?Selection.EntireRow.Address $1:$1048576 

我得到了预期的行参考。

行更占优势吗? 是否有战争?

答案在于Range.EntireColumn的文档(重点是我的):

返回一个Range对象,它表示包含指定范围的整个列(或多个列)

当您select整行时,包含每行和每列的交集的唯一范围是整个工作表。

显然, EntireRow – 当你select一个整列时,每一列和每一行的交集就是整个工作表。

此时,Excel如何显示地址并不重要(事实上, ActiveSheet.Cells.Address也输出$1:$1048576 ,就像Range("$A:$XFD").Address )一样。 唯一真正重要的是它们是可逆的 – 那就是你可以把.Address的输出.Address回给Range()

它归结为Range("$1:$1048576").Address = Range("$A:$XFD").Address 。 所有Excel都必须使用的Range本身,当它build立的地址反馈给你。 所以在这个有2个可供select的独特实例中,它只是select一个。 行符号与列符号一样有意义,并且首先进入.Cell(r, c)寻址,为什么不呢? 在一个优先注意,我真的很高兴他们打这个电话 – 我从来没有记得, XFD是最大的列地址…

还要记住, Range对象没有关于它来自哪里的信息,所以它不知道它是通过对EntireRow而不是EntireColumn的调用来创build的。 用户的期望可能会有所不同,但是用户再次拥有比Range更多的上下文。