ActiveSheet.ShowAllData возвращает разные результаты на 2 компьютерах - PullRequest
0 голосов
/ 28 марта 2019

У меня есть макрос, который фильтрует все данные (250 строк) по одному столбцу, а затем удаляет данные, которые скрыты после фильтрации.

Следующий шаг - нефильтровать весь лист с помощью ActiveSheet.ShowAllData.

Что странно, на моей машине после нефильтрования мой использованный диапазон кажется 200 строк (50 строк было удалено).

Однако на другой машине, с той же версией Excel (Office365), после фильтрации ипри удалении 50 строк видимый диапазон составляет 1 048 576 строк (что в значительной степени мешает дальнейшему автозаполнению и т. д.)

Код выглядит следующим образом:

Dim lastRow As Long
Dim iCntr As Long

Range("A:AI" & Lines).AutoFilter Field:=32, Criteria1:= _
    "2611"
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For iCntr = lastRow To 1 Step -1
    If Rows(iCntr).Hidden = True Then Rows(iCntr).EntireRow.Delete
Next

ActiveSheet.ShowAllData

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Я рекомендую собрать все строки, которые необходимо удалить, в переменную RowsToDelete, а затем отобразить все данные перед удалением всех строк одновременно.Не уверен, что это, наконец, решит вашу проблему, но, по крайней мере, это намного быстрее, чем удаление каждой строки за другой.

Option Explicit

Public Sub DeleteAllHiddenRows()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    ws.Range("A:AI").AutoFilter Field:=32, Criteria1:="2611"

    Dim RowsToDelete As Range

    Dim iRow As Long
    For iRow = 1 To LastRow
        If ws.Rows(iRow).Hidden Then
            If RowsToDelete Is Nothing Then
                Set RowsToDelete = ws.Rows(iRow)
            Else
                Set RowsToDelete = Union(RowsToDelete, ws.Rows(iRow))
            End If
        End If
    Next iRow

    ws.ShowAllData
    RowsToDelete.EntireRow.Delete
End Sub
0 голосов
/ 28 марта 2019
Sub clear_filter()
Dim sh As Worksheet



sh=activeworksheet
If sh.AutoFilterMode Then

 On Error GoTo 1
  sh.ShowAllData
    sh.AutoFilterMode = False
End If

1

MsgBox "Data filters cleared", vbInformation


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