2014-11-09 5 views

ответ

5

Единственный способ, которым я мог думать о том, что был устойчив к колонны прячась, а также (это довольно обычно для столбцов, которые будут сгруппированы и разрушилась, так это должно быть обработано), должен был использовать цикл:

'mode = 0 for Cells, >0 for Rows, <0 for Columns 
Function getListObjectVisibleCount(lo As ListObject, Optional mode As Integer = 0) As Long 
    Dim visCnt As Long, area As Range 

    On Error Resume Next 'special cells raises an error if nothing is found 
    For Each area In lo.DataBodyRange.SpecialCells(xlCellTypeVisible).Areas 
     If mode = 0 Then 
      visCnt = visCnt + area.Columns.Count * area.Rows.Count 
     ElseIf mode > 0 Then 
      visCnt = visCnt + area.Rows.Count 
     Else 
      visCnt = visCnt + area.Columns.Count 
     End If 
    Next 
    On Error Goto 0 

    getListObjectVisibleCount = visCnt 

End Sub 

Редактировать: изменено с демо Sub на функцию. Возвращает количество ячеек, количество строк или количество столбцов.

+0

Спасибо, очень надежный! – user1283776

+0

вышеуказанная функция не работает, если я передаю ей таблицу listobject «tab_data» на листе. = getListObjectVisibleCount (tab_data) – sifar786

Смежные вопросы