Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA不是';t删除空白单元格 我一直在使用IF条件来查找电子表格中的空白单元格,然后删除不想要的部分,并将其他单元格移向上。它进行得很顺利,但是当我使用这个数据库时,代码不会删除一些行_Vba_Excel - Fatal编程技术网

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-请添加一篇包含解决方案的新帖子(你所做的),并“接受”它。