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