删除VBA中列的内容的条件

我是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列中所有具有空单元格的行都被删除。

感谢您提供任何帮助。

两件事情。

首先,您需要将表单分配给范围对象,以便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 

有关删除行的更多更快的方法,请参阅这里 。