VBA:如果未找到任何值,则会删除第一行

时间:2016-11-16 16:22:50

标签: excel vba excel-vba

我有一些代码可以删除不包含密钥字符串的每一行(在本例中为" 2550")。问题是,如果我错误地运行了两次脚本,它将删除工作表中的顶行。

请参阅以下代码:

Dim ws As Worksheet
Dim rng As Range
Dim lastRow As Long

Set ws = ActiveWorkbook.Sheets(1)

lastRow = ws.Range("L" & ws.Rows.Count).End(xlUp).Row

Set rng = ws.Range("L1:L" & lastRow)

With rng
    .AutoFilter Field:=1, Criteria1:="<>*2550*"
    .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With

ws.AutoFilterMode = False

我认为如果没有该行的行,AutoFilter将不会显示任何内容,因此不应删除任何内容,但似乎并非如此。任何人都可以解释为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

进行测试..

lastRow = ws.Range("L" & ws.Rows.Count).End(xlUp).Row
If lastRow = 1 Then
  Set rng = ws.Range("L1:L" & lastRow)

  With rng
    .AutoFilter Field:=1, Criteria1:="<>*2550*"
    .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
  End With

  ws.AutoFilterMode = False
End If

如果lastRow返回顶行,则不会完成其余的操作。

答案 1 :(得分:1)

另一种解决方案是在上一行声明中使用Max函数。类似的东西:

lastRow = Application.Max(2,ws.Range("L" & ws.Rows.Count).End(xlUp).Row)

允许您跳过一些嵌套和IF语句。