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

我有一些代码删除不包含键string的每一行(在本例中为“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将显示任何内容,因此不应该删除,但似乎并非如此。 任何人都可以解释为什么这可能是?

另一个解决scheme是在最后一行声明中使用Max函数。 就像是:

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

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

把一个testing..

 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返回最上面一行,则不会执行其他操作。