VBA不是';t删除空白单元格 我一直在使用IF条件来查找电子表格中的空白单元格,然后删除不想要的部分,并将其他单元格移向上。它进行得很顺利,但是当我使用这个数据库时,代码不会删除一些行
以下是查找并删除部分行的部分:VBA不是';t删除空白单元格 我一直在使用IF条件来查找电子表格中的空白单元格,然后删除不想要的部分,并将其他单元格移向上。它进行得很顺利,但是当我使用这个数据库时,代码不会删除一些行,vba,excel,Vba,Excel,以下是查找并删除部分行的部分: 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 Se
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。其他单元格在我第一次运行代码时已被删除)
我尝试了vbNullString
和isEmpty()。我在电子表格中直接使用了公式=ISBLANK()
,结果是正确的
我注意到,如果我多次运行代码,它最终会删除我想要的所有行。我问自己为什么不在第一次运行时将其全部删除?谢谢。解决方案确实非常简单,正如paulsm4所建议的那样,只需要反向运行循环
我不得不将I=2的更改为nLines
对于I=nLines的更改为2步骤-1
解释是,当VBA删除该行并将其向上移动时,计数器递增,向下移动一行,正如Peh所解释的,“丢失”一些行。解决方案确实非常简单,只需按照paulsm4的建议向后运行循环即可
我不得不将I=2的更改为nLines
对于I=nLines的更改为2步骤-1
解释是,当VBA删除该行并将其向上移动时,计数器将递增并向下移动一行,正如Peh所解释的那样,“缺少”一些行。建议:尝试向后运行循环:对于i=nLines to 2 Step-1
。解释是:假设您有10行(编号从1到10)删除第2行,然后第3行到第10行向上移动一行,变成第2行到第9行(第3行变成第2行,第4行变成第3行,…)。因此,行会改变它们的位置。但是现在,i
增加,你往下走一行,但不应该这样做,因为下一行已经变成了当前行,这就是为什么我们错过了那一行。如果你从末尾开始,那么行向下移动并不重要,因为我们向上走。@Peh好吧,在你解释之后,这看起来很简单。非常感谢。抱歉,之前没有看到您的问题,jf8769。谢谢你的回复,佩赫。建议:jf8769-请使用解决方案添加一篇新帖子(您所做的),并“接受”它。建议:尝试向后运行循环:For i=nLines to 2 Step-1
。解释是:假设您有10行(编号从1到10),删除了第2行,然后将第3到10行上移一行,成为第2到9行(第3行变为第2行,第4行变为第3行,…)。因此,行改变了位置。但是现在,i
增加,你向下走一行,但不应该,因为下一行已经成为当前行,这就是为什么我们忽略了该行。如果你从末尾开始,那么行向下移动并不重要,因为我们向上走。@Peh好吧,在你解释之后,它看起来很简单很简单。谢谢你!很抱歉之前没有看到你的问题,jf8769。谢谢你的回复,Peh。建议:jf8769-请添加一篇包含解决方案的新帖子(你所做的),并“接受”它。