为什么我的自动过滤器用来删除带有零的行,所以事实之后会删除标头?

时间:2019-05-16 19:09:34

标签: excel vba filter

我正在尝试删除费用为0的费用报告中的行,因为该信息不重要。我正在使用自动过滤器来过滤数量列中只有零的行,并删除这些行。问题在于,当代码移至此任务之后的下一步时,它使我的报告文档不具有以前拥有的标头,这些标头非常重要。

我尝试将范围从“ AB1:AB”更改为“ AB2:AB”,但没有执行任何操作,在第二个连接范围值中,我尝试将“ AB”更改为“ AB2”,这返回了错误指出“对象'_global'的方法'范围'失败。”

Application.ScreenUpdating = False
        Range("AB1:AB" & Range("AB" & Rows.Count).End(3)(1).Row).AutoFilter 1, 0#, xlAnd, 0
            Range("AB2:AB" & Range("AB" & Rows.Count).End(3)(1).Row).SpecialCells(12).EntireRow.Delete
        ActiveSheet.AutoFilterMode = False
    Application.ScreenUpdating = True

1 个答案:

答案 0 :(得分:0)

您遇到的问题是,如果AB列中没有0,那么您现有的代码过滤器将仅显示标题行,然后将其删除。我添加了一些代码以遍历AB列,并在操作现有代码之前检查是否存在0。

我正在编辑此答案,它不再使用您的自动筛选方法。下面的代码应该可以实现您想要实现的目标,并且可以避免在注释中突出显示的删除循环内行的潜在问题。

我再次进行了编辑,以更正您所描述的问题,其中代码代入值包括0(例如10.05)。

Sub Delete_Zero_Rows()

Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long

With Worksheets("Sheet1")

    'Set the first and last row to loop through
    Firstrow = .UsedRange.Cells(1).Row
    Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

    'Loops from Lastrow to Firstrow (bottom to top)
    For Lrow = Lastrow To Firstrow Step -1

        'Checks the values in column AB
        With .Cells(Lrow, "AB")

            If Not IsError(.Value) Then

                If .Value = "0" Then .EntireRow.Delete

            End If
        End With
      Next Lrow
    End With
End Sub

请记住将我的代码中的“ Sheet1”替换为调用工作表的任何内容。

这应该可以解决您的问题!