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

时间:2014-06-10 09:29:23

标签: vba excel-vba excel-2010 excel

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

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

大部分时间都有效。但是当表只有一行或两行可见时,总是返回1 ,即使有两行时它应该返回2。这是一个已知的问题?如果是,有任何解决方法吗?

我宁愿避免手动循环遍历表格中的每一行来计算,因为它可能非常大而且速度会过慢。

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

'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。

1 个答案:

答案 0 :(得分:4)

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

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