TopPosition

TopPosition属性返回选定区域的第一个数据行的位置,BottomPosition属性返回 选定区域的最后一个数据行的位置。
如果只选定一行,这两个属性的返回值和Position属性相同。

和Position属性一样,这两个属性在计算的时候,均不包括分组行,下图清晰地说明了这种特性。

但是也稍有不同,如果选定区域的第一行是分组行,TopPosition会向下寻找,直到找到一个不是分组行的数据行,然后返回此行的位置;
同样,如果选定区域的最后一行是分组行,
BottomPosition会向上寻找,直到找到第一个不是分组行的数据行,然后返回此行的位置。
除非只选定了一行,而且此行恰好是分组行,
TopPosition和BottomPosition属性才会返回-1。
而Position属性不具备上述特性,只要选定的是分组行,就直接返回-1。
下图可以很好地说明这种特性:

示例

锁定用户选定的行:

With Tables("订单")
    For
i as Integer = .TopPosition To .BottomPosition
        .Rows(i).Locked =
True
    Next
End
With

上述代码,不管是在汇总模式下,还是普通模式下,都能正常地锁定选定的一行或多行,因为代码自动排除了分组行。
但是如果当前选定的是一行,而且这一行恰好是分组行,那么Position、
TopPosition、BottomPosition三个属性都返回-1,导致上述代码运行出错。
所以比较完美的代码是:

With Tables("订单")
    If .
TopPosition > -1 Then '如果选定区域包括数据行
        For
i as Integer = .TopPosition To .BottomPosition
            .
Rows(i).Locked
= true
        Next
    End If
End With

注意我们根据TopPosition是否大于-1,来判断选定区域是否包括分组行,其理由前面已经讲述,就不再重复。


本页地址:http://www.foxtable.com/webhelp/topics/1595.htm