ListObject.DataBodyRange.SpecialCells(xlCellTypeVisible).Rows.count 返回错误值

问题描述 投票:0回答:2

我有一个过滤后的列表对象,需要获取当前可见的行数。我用这个语句来获取行数:

MySheet.ListObjects("MyListObject").DataBodyRange.SpecialCells(xlCellTypeVisible).Rows.count

大多数时候它是有效的。但是,当表只有一两行可见时,它总是返回 1,即使当有两行时它应该返回 2。这是一个已知的问题?如果是这样,有什么解决办法吗?

我宁愿避免对表中的每一行进行手动循环进行计数,因为它可能非常大,而且速度会非常慢。

更多信息:列表对象启用了总计行,并使用以下代码进行过滤:

'Remove existing filter
MySheet.ListObjects("MyListObject").Range.AutoFilter

'Apply new filter
MySheet.ListObjects("MyListObject").Range.AutoFilter Field:=1, Criteria1:=key

其中字段 1 是(非唯一)键,

key
是从其他地方检索的字符串。我可以物理地看到表中有两行可见(不包括标题行或总计行),但是当有 2 行时,
.Rows.Count
始终返回 1。

vba excel excel-2010
2个回答
9
投票

该代码不正确 - 它将返回筛选表中第一个可见的连续单元格块中的行数。您应该仅计算一列中可见单元格的数量:

MySheet.ListObjects("MyListObject").DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).count

0
投票

非常感谢您的帮助,您拯救了我的日子。如果一个 hade 2 @@ss a 会给你其中一个。

© www.soinside.com 2019 - 2024. All rights reserved.