VBA不删除空白单元
问题描述:
我一直在使用IF条件来查找电子表格中的空白单元格,然后删除我不想要的部分并将其他单元格向上移动。它进展顺利,但是当我使用这个数据库时,代码不会删除一些行。VBA不删除空白单元
这里是下面的部分在那里找到并删除该行的一部分:
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
这里是文件:Spreadsheet(我有麻烦的细胞E105 E125到其他的人已经。在我第一次运行代码时被删除)。
而不是If Disciplinas.Cells(i, start_time.Column) = "" Then
我试过vbNullString
和isEmpty() = TRUE
,其中他们都没有删除行。我直接在电子表格中使用公式=ISBLANK()
,结果是真实的。
我注意到,如果我多次运行代码,最终会删除所有我想要的行。我问自己为什么它不能在第一次运行中将其全部清除?谢谢。
答
解决方案确实非常简单,只需要按照paulsm4的建议反向运行环路。我不得不为For i = nLines to 2 Step -1
更改For i = 2 To nLines
。
解释是,当VBA删除该行并将其向上移动时,计数器递增并向下一行,“丢失”一些行,如Peh解释的那样。
建议:尝试向后运行循环:'For i = nLines to 2 Step -1'。 – paulsm4
解释是:假设你有10行(编号从1到10),你删除第2行,然后第3到10行向上移动一个并成为第2行到第9行(第3行成为第2行,第4行成为第3行,... )。所以这些行改变了他们的立场。 **但现在'我'增量,你走一条线**,但它不应该因为下一行已经成为*当前*线,这就是为什么我们错过了这条线。如果从最后开始,那么行向下移动并不重要,因为我们向上走。 –
@裴,那么你解释后似乎很简单。谢谢! – jf8769