我正在使用下面的代码来获取在MySQL中过滤的数据行的计数,但是在获取计数时,它给出了运行时错误:
“需要对象”。
请告诉我需要什么样的改变。
Set rnData = .UsedRange
With rnData
.AutoFilter Field:=327, Criteria1:=Mid(provarr(q), 1, 2)
.Select
.AutoFilter Field:=328, Criteria1:=Mid(provarr(q), 3, 7)
.Select
.AutoFilter Field:=330, Criteria1:=Mid(provarr(q), 10, 2)
.Select
.AutoFilter Field:=331, Criteria1:=Mid(provarr(q), 12, 2)
.Select
Rowz = .AutoFilter.Range.SpecialCells(xlCellTypeVisible).Rows.count
....
End With
字符串
9条答案
按热度按时间iyfjxgzm1#
如果您尝试像这样计算已自动筛选范围中的行数:
字符串
它只计算自动筛选范围的第一个连续可见区域中的行数。例如,如果自动筛选范围是第1到10行,并且筛选了第3、5、6、7和9行,则有四行可见(第2、4、8和10行),但它将返回2,因为第一个连续可见范围是第1行(标题行)和第2行。
更准确的替代方法是这样的(假设
ws
包含带有过滤数据的工作表):型
我们必须减去1来移除标题行。我们需要将标题行包含在我们的计数范围中,因为如果没有找到任何单元格,SpecialCells将抛出错误,这是我们想要避免的。
Cells
属性给予一个精确的计数,即使Range有多个Area,这与Rows
属性不同。所以我们只需要自动筛选范围的第一列,然后计算可见单元格的数量。kx5bkwkv2#
在你的代码中简单地写上:
字符串
请确保应用正确的范围,但仅限于一列
bmvo0sr53#
虽然我同意给出的结果,但它们对我不起作用。如果你的表有一个名字,这将起作用:
字符串
这是修改后的工作与列表对象从原来的版本,我发现在这里:
http://www.ozgrid.com/forum/showthread.php?t=81858
trnvg8h34#
我知道这是一个老线程,但我发现在this article中使用Subtotal方法也可以准确地呈现行数。我发现的公式是在this article中,看起来像这样:
字符串
我对它进行了测试,它每次都能准确地显示出A列中可见行的正确数量。
希望这能帮助像我这样的网络旅行者。
kt06eoxx5#
字符串
a14dhokn6#
我已经找到了一种方法来做到这一点,它需要2个步骤,但它的工作
字符串
c90pui9n7#
我认为现在你有了每一行的范围,你可以很容易地用偏移量来操纵这个范围(行,列)操作?对过滤的记录进行计数的意义是什么(除非你需要一个变量中的计数)?所以与其(或者在同一块中)编写代码操作,将每行移动到一个空的隐藏工作表,一旦完成,你可以从传输的范围数据中做任何你喜欢的工作?
fslejnso8#
字符串
这对我很有效
8hhllhi29#
我通过公式来实现它,假设这个表:Example table
如A2所示,公式
字符串
向下传播,这意味着第二个SUBTOTAL的第二个参数的开始将作为枢轴移动。
这是因为Subtotal计算所有可见的过滤结果,得到结果的数量(第一个SUBTOTAL的情况),然后我们减去当前下面的剩余行;最后我们添加偏移量(“+1”),这是我们搜索域上方的行数(在这种情况下,它只是标题)。