Удалить скрытые (отфильтрованные) строки в таблице - PullRequest
0 голосов
/ 11 июля 2020

как я могу удалить скрытые (отфильтрованные) строки в таблице? Я пробовал это. Но я полагаю, что Excel не распознает ".SpecialCells (xlCellTypeHidden)"

If ActiveSheet.ListObjects(1).DataBodyRange.SpecialCells(xlCellTypeHidden).Rows.Count >= 1 Then
ActiveSheet.ListObjects(1).DataBodyRange.EntireRow.Delete

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Я обнаружил, что цикл выполняется медленно, и предложенное ниже решение цикла не работает с таблицей. Опять же, мой предыдущий вопрос был « Как удалить скрытые (отфильтрованные) строки в таблице? Я пробовал это. Но я думаю, Excel не распознает». SpecialCells (xlCellType Hidden )". Итак, вместо этого я как бы перевернул .SpecialCells (xlCellTypeVisible) logi c, сначала раскрасив отфильтрованные (видимые строки) в таблице в желтый цвет. Затем я отфильтровал по цвету: No Fill. Используется .SpecialCells (xlCellTypeVisible) в удалите эти строки, удалите фильтр и удалите окраску строк, которые были видимыми в начале. В результате скрытые (отфильтрованные) строки удаляются. Эта подпрограмма удаляет скрытые строки очень быстро.

Sub DeleteHiddenRows()
'Keep all visible rows and remove all other hidden rows in a table

'Optimize Code
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual

    'colors visible rows yellow if visible
    If ActiveSheet.ListObjects(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Rows.Count >= 1 Then
        ActiveSheet.ListObjects(1).DataBodyRange.Interior.ColorIndex = 6
    End If
    
    'reverse filter on non-colored filled cells
    ActiveSheet.ListObjects(1).Range.AutoFilter Field:=1, Criteria1:= _
    RGB(255, 255, 255), Operator:=xlFilterNoFill
    
     'if data is in a table run this to delete visible - non-colored cells
    If ActiveSheet.ListObjects(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Rows.Count >= 1 Then
        ActiveSheet.ListObjects(1).DataBodyRange.EntireRow.Delete
    End If
    
    ActiveSheet.ShowAllData
     
    'remove cell color in table data body range
    With ActiveSheet.ListObjects(1).DataBodyRange.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
     
'Turn back on screen updating and Automatic calculation
  Application.ScreenUpdating = True
  Application.Calculation = xlAutomatic
     
End Sub
0 голосов
/ 11 июля 2020

Отредактировано с исправлением BDra

Попробуйте этот код:

For i = 10 To 1 Step -1
    If Rows(i).Hidden Then Rows(i).EntireRow.Delete
Next

Измените 10 на количество строк для проверки. Обратите внимание, что наименьший индекс для Rows () равен 1, а не 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...