VBA不删除空白单元格

我一直在使用IF条件来查找电子表格中的空白单元格,然后删除我不想要的部分,并将其他单元格向上移动。 它进展顺利,但是当我使用这个数据库时,代码不会删除一些行。

以下是查找和删除部分行的部分:

Dim wb As Workbook Dim Disciplinas As Worksheet Set wb = ThisWorkbook Set Disciplinas = wb.Sheets("Disciplinas") Dim start_time As range Dim i As Integer, nLines As Integer nLines = Disciplinas.Cells(Rows.Count, 2).End(xlUp).Row Set start_time = Disciplinas.Rows(1).Find(what:="HR_INICIO", LookIn:=xlValues, lookat:=xlWhole) For i = 2 To nLines If Disciplinas.Cells(i, start_time.Column) = "" Then Disciplinas.Cells(i, 2).Resize(, 13).Delete Shift:=xlUp End If Next 

这里是文件: 电子表格 (我遇到的单元格是E105到E125,其他的在第一次运行代码时已经被删除了)。

而不是If Disciplinas.Cells(i, start_time.Column) = "" Then我已经尝试vbNullStringisEmpty() = TRUE ,其中所有这些都没有删除行。 我直接在电子表格中使用了公式=ISBLANK() ,结果是真实的。

我注意到,如果我多次运行代码,最终会删除所有我想要的行。 我问自己为什么在第一次运行中不能把它全部清除掉? 谢谢。

解决scheme确实非常简单,正如paulsm4所build议的那样,只是需要向后运行循环。

我不得不改变For i = 2 To nLines For i = nLines to 2 Step -1

解释是,当VBA删除行并将其向上移动时,计数器递增并且沿着一行向下“丢失”一些行,如Peh解释的那样。