过滤表后,范围类的删除方法失败

时间:2016-11-03 05:31:36

标签: vba excel-vba excel

我试图在autofilter之后删除表中的所有可见行但是它给了我那个错误。我试过抬头查看各个地方,因为之前有人询问这个问题,但到目前为止,我找不到任何解决方案的代码

Set rng = wk.Range(wk.Range("A1"), wk.Range("A1").SpecialCells(xlLastCell))
        Set tbl = wk.ListObjects.Add(xlSrcRange, rng, , xlYes)

        tbl.Range.AutoFilter Field:=16
        tbl.Range.AutoFilter Field:=16, Criteria1:="=NR", Operator:=xlOr, Criteria2:="="
  

此行会导致错误:wk.Range("$A$1:$AB$" & frow).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete

        tbl.Range.AutoFilter Field:=16

我也试过这个sub替换了错误的行但是在删除行时它给了我同样的错误

'Call RemoveVisibleRows(wk)
  

这是同一个

的子程序
Sub RemoveVisibleRows(wDel As Worksheet)

Dim oRow As Range, Drng As Range
Dim myRows As Range

With wDel
    Set myRows = Intersect(.Range("A:A").EntireRow, .UsedRange)
    If myRows Is Nothing Then Exit Sub
End With

For Each oRow In myRows.Columns(1).Cells
    If Not oRow.EntireRow.Hidden And oRow.Row <> 1 Then
        If Drng Is Nothing Then
            Set Drng = oRow
        Else
            Set Drng = Union(Drng, oRow)
        End If
    End If
Next
  

错误行:If Not Drng Is Nothing Then Drng.EntireRow.Delete

End Sub

1 个答案:

答案 0 :(得分:1)

On Error Resume Next
Set Target = wk.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
On Error GoTo 0

If Not Target Is Nothing Then
    If Target.Rows > 1 Then
        Target.Offset(1).Resize(Target.Rows.Count - 1).EntireRow.Delete
    End If
End If