我正在尝试删除费用为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
答案 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”替换为调用工作表的任何内容。
这应该可以解决您的问题!