Your interpretation of what Item(2) is not entirely correct either. The code
I posted worked fine, but only because I used a single column AutoFilter for
my testing. The number in the parentheses is does not refer to the column,
per se; rather, it refers to the second cell in the range with the order of
counting the cells running across the row first before dropping down to the
next lower row, and then across that row until its end before dropping down
to the row below it, and so on. So, in a single column range, Item(2) does,
in fact, refer to the second cell down because there is no second column
available in the first row for a cell there to be counted. If you have
multiple columns, then Item(2) would, in that case, as you pointed out,
refer to the first cell in the second column. Of course, that means my using
2 as a constant was a bad idea because I simply didn't think about two or
more columned AutoFilter when developing my code. A bad mistake on my part,
so thanks for catching it. However, I am glad I made that mistake so that
you could bring it to my attention. Why? Because in re-examining the
problem, I ended up realizing the required code is much simpler than I first
imagined it to be...the code for the main functionality turns out, in the
end, to basically be a one-liner.
Sub CountVisibleRows()
Dim R As Range, C As Long, OmitHeaderFromCount As Boolean
OmitHeaderFromCount = True
C = Worksheets("Sheet2").AutoFilter.Range.Columns(1). _
SpecialCells(xlVisible).Count + OmitHeaderFromCount
MsgBox "There are " & C & " visible AutoFilter'ed rows."
End Sub
Note that I added a Boolean variable named OmitHeaderFromCount to let the
programmer be able to set whether the header should be omitted from the
count or not. In my example above, I chose to omit it from the count by
setting the variable to True.