我是VBA的初学者,所以我可能犯了非常基本的错误。 我想删除工作簿的每个工作表中的所有行,其中该行在列S中没有条目。
我使用以前回答的问题中的一些见解编写了以下代码,但它没有按预期工作:
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
For Each cell In Range("s1:s400")
If IsEmpty(cell) Then
cell.EntireRow.Delete shift:=xlUp
End If
Next
Next
根本没有遵循第一个循环。只有活动工作表删除了任何行。 第二个循环的应用不一致,因为并非所有S列中都有空单元格的行都被删除。
感谢您提供任何帮助。
答案 0 :(得分:2)
两件事。
首先,您需要将工作表分配给范围对象,因此Range("s1:s400")
应为ws.Range("s1:s400")
第二个在循环中删除行时,向后循环。这不能在For Each循环中完成,因此更改为常规for循环和Step -1
Dim ws As Worksheet
Dim i As Long
For Each ws In ThisWorkbook.Worksheets
For i = 400 To 1 Step -1
If ws.Cells(i, "S").Value = "" Then
ws.Rows(i).Delete
End If
Next
Next
有关删除行的更多更快的方法,请参阅HERE。