.Offset(1,0).EntireRow.Delete

时间:2017-06-16 16:21:48

标签: excel-vba vba excel

已经阅读了大量关于此的帖子,提出了各种建议,似乎无法解决此错误。

我有一系列代码块,用于在电子表格的第I列中查找各种数据。如果找到该数据,则应删除该行。我想删除除标题行之外的所有内容,因此我的代码块如下(1示例):

Sub Strip()
With Columns("I")
    .AutoFilter Field:=1, Criteria1:="=70-79%", VisibleDropDown:=False
    .Offset(1, 0).EntireRow.Delete
    .AutoFilter
    .AutoFilter
End With
End Sub

当我逐步执行此操作并进入Offset行时,它会选择正确的条件,但是当单步执行该行时,我会收到错误:运行时错误1004:应用程序定义的错误或对象定义的错误。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

就像我在评论中提到的那样,您需要将列更改为范围。

尝试此操作(未经测试

Sub Strip()
    Dim ws As Worksheet
    Dim lRow As Long

    Set ws = Sheet1

    With ws
        .AutoFilterMode = False

        lRow = .Range("I" & .Rows.Count).End(xlUp).Row

        Set Rng = .Range("I1:I" & lRow)

        With Rng
            .AutoFilter Field:=1, Criteria1:="=70-79%", VisibleDropDown:=False
            .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        End With

        .AutoFilterMode = False
    End With
End Sub

答案 1 :(得分:1)

With Columns("I")
...
.Offset(1, 0).EntireRow.Delete

您无法offset整列。试试UsedRange.Columns("I"),或确定包含您的数据但不包含整个列的内容。 UsedRange需要对某些工作表进行明确限定,因此如果您的代码不在工作表代码模块中,请将其限定为某些显式工作表或ActiveSheet

With ActiveSheet.UsedRange.Columns("I")