VBA:未找到值时,删除第一行

VBA:未找到值时,删除第一行,vba,excel,Vba,Excel,我有一些代码可以删除不包含键字符串的每一行(在本例中为“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:

我有一些代码可以删除不包含键字符串的每一行(在本例中为“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
Dim ws As工作表
变暗rng As范围
最后一排一样长
设置ws=ActiveWorkbook.Sheets(1)
lastRow=ws.Range(“L”和ws.Rows.Count).End(xlUp).Row
设置rng=ws.Range(“L1:L”和lastRow)
带rng
.自动筛选字段:=1,标准1:=“*2550*”
.Offset(1,0).特殊单元格(xlCellTypeVisible).EntireRow.Delete
以
ws.AutoFilterMode=False
我认为,如果没有带有该键的行,自动筛选将不显示任何内容,因此不应删除任何内容,但情况似乎并非如此。有人能解释一下为什么会这样吗?

进行测试

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=ws.Range(“L”&ws.Rows.Count).End(xlUp).Row
如果lastRow=1,则
设置rng=ws.Range(“L1:L”和lastRow)
带rng
.自动筛选字段:=1,标准1:=“*2550*”
.Offset(1,0).特殊单元格(xlCellTypeVisible).EntireRow.Delete
以
ws.AutoFilterMode=False
如果结束

如果lastRow返回最上面的一行,它将不执行其余的操作。

另一个解决方案是在最后一行声明中使用Max函数。比如:

lastRow = Application.Max(2,ws.Range("L" & ws.Rows.Count).End(xlUp).Row)
允许您跳过一些嵌套和IF语句