TopPosition
TopPosition属性返回选定区域的第一个数据行的位置,BottomPosition属性返回
选定区域的最后一个数据行的位置。
如果只选定一行,这两个属性的返回值和Position属性相同。
和Position属性一样,这两个属性在计算的时候,均不包括分组行,下图清晰地说明了这种特性。
但是也稍有不同,如果选定区域的第一行是分组行,TopPosition会向下寻找,直到找到一个不是分组行的数据行,然后返回此行的位置;
同样,如果选定区域的最后一行是分组行,BottomPosition会向上寻找,直到找到第一个不是分组行的数据行,然后返回此行的位置。
除非只选定了一行,而且此行恰好是分组行,TopPosition和BottomPosition属性才会返回-1。
而Position属性不具备上述特性,只要选定的是分组行,就直接返回-1。
下图可以很好地说明这种特性:
示例
锁定用户选定的行:
With
Tables("订单")
上述代码,不管是在汇总模式下,还是普通模式下,都能正常地锁定选定的一行或多行,因为代码自动排除了分组行。
但是如果当前选定的是一行,而且这一行恰好是分组行,那么Position、TopPosition、BottomPosition三个属性都返回-1,导致上述代码运行出错。
所以比较完美的代码是:
With Tables(
"订单")注意我们根据TopPosition是否大于-1,来判断选定区域是否包括分组行,其理由前面已经讲述,就不再重复。