ActiveSheet.ShowAllData在2台计算机上返回不同的结果

时间:2019-03-28 07:40:37

标签: excel vba

我有一个宏,可以按一列过滤所有数据(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 个答案:

答案 0 :(得分:1)

我建议将所有需要删除的行收集到变量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

答案 1 :(得分:0)

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