如何在隐藏所有工作表行时获取RowCount?

时间:2013-01-03 10:01:45

标签: excel vba excel-vba hidden rowcount

我通过使用以下代码行来隐藏行,只排除前两行,因为它们是标题。

For i=3 To ThisWorkBook.Sheets("ALL").Range("A1",ThisWorkBook.Sheets("ALL").Range("A65536").End(xlUp)).Rows.Count
    ThisWorkBook.Sheets("ALL").Rows(i).EntireRow.Hidden=True
Next

现在要获取隐藏的行数,我正在使用以下代码行

From i=3 To ThisWorkBook.Sheets("ALL").Range("A1",ThisWorkBook.Sheets("ALL").Range("A65536").End(xlUp)).Rows.Count
    ThisWorkbook.Sheets("ALL").EntireRow.Hidden=False
Next

但我得到rowcount为2.事实上,工作表有10行。那么如何将隐藏行显示为可见?

2 个答案:

答案 0 :(得分:0)

如果我正确地理解了您的问题,这里有一种替代方法来解决您的问题,这将为您提供一些运行速度更快且管理非常干净的代码:

Option Explicit

Sub CountHiddenRows()

Dim wks As Worksheet
Set wks = ThisWorkbook.Sheets("ALL")

With wks

    Dim lngLastRow As Long
    lngLastRow = .Range("A" & .Rows.Count).End(xlUp).Row

    .Range("A3:A" * lngLastRow).EntireRow.Hidden = True

    Dim rngConsider As Range
    Dim lngHiddenRows As Long, lngRows As Long, lngVisibleRows As Long

    Set rngConsider = .Range("A1:A" & lngLastRow)

    lngRows = rngConsider.Rows.Count
    lngVisibleRows = rngConsider.SpecialCells(xlCellTypeVisible).Rows.Count
    lngHiddenRows = lngRows - lngVisibleRows

    MsgBox "There are " & lngHiddenRows & " hidden rows."

End With

End Sub

答案 1 :(得分:0)

Worksheet.Rows.Count始终返回工作表中的总行数 在这里,我会使用Worksheet.UsedRange.Rows.Count 此外,当最后一行的第一个单元格为空时,您的代码可能会失败 这是一个小函数,它计算第2行和最后一个使用行之间的可见行数。

Function CountVisibleRows() As Integer
  Dim R As Integer
  For R = 2 To UsedRange.Rows.Count
    If Not Rows(R).Hidden Then CountVisibleRows = CountVisibleRows + 1
  Next R
End Function

当行数很少时,我通常会使用一个循环,因为我有更好的控制,而且通常更快 当我处理数千行时,要求Excel使用SpecialCells或其他函数会更快。