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

Kai*_*Kai 1 excel vba excel-vba excel-2010

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

MySheet.ListObjects("MyListObject").DataBodyRange.SpecialCells(xlCellTypeVisible).Rows.count
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,它都有效。但是,当表中只有一两行可见时,即使有两行时它应该返回2 ,它也总是返回1。这是一个已知的问题?如果是这样,是否有任何解决方法?

我宁愿避免手动遍历表中的每一行进行计数,因为它可能很大,而且会非常慢。

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

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

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

其中字段1是(非唯一)键,并且key是从其他位置检索的字符串。我可以从物理上看到表中有两个可见行(不包括标题行或总计行),但是.Rows.Count当有2行时始终返回1。

Ror*_*ory 5

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

MySheet.ListObjects("MyListObject").DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).count
Run Code Online (Sandbox Code Playgroud)