VBA:未找到值时,删除第一行
我有一些代码可以删除不包含键字符串的每一行(在本例中为“2550”)。问题是,如果我错误地运行脚本两次,它将删除工作表中的第一行 请参阅下面的代码: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:
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语句