Excel 为每个循环删除的行打断

Excel 为每个循环删除的行打断,excel,vba,foreach,Excel,Vba,Foreach,我有一个Excel文件,它是从一个包含大量表格的SQL报表创建的 我必须根据单元格的值删除行或添加分页符 这是一个谷歌电子表格,显示了我的Excel文件的一个非常基本的版本 如果集合的总数不是0,则添加分页符。如果集合的总数为0,请删除该集合。如果其单元格具有左边框,则知道总数 我的代码的问题是:如果删除了一个集合,而下一个集合的行数比删除的集合的行数少,那么代码将错过该集合,并开始影响下一个集合 在提供的示例中,第一个集合(总计0)和第二个集合(0)都会获得分页符。删除第三组(=0)。由于第四

我有一个Excel文件,它是从一个包含大量表格的SQL报表创建的

我必须根据单元格的值删除行或添加分页符

这是一个谷歌电子表格,显示了我的Excel文件的一个非常基本的版本

如果集合的总数不是0,则添加分页符。如果集合的总数为0,请删除该集合。如果其单元格具有左边框,则知道总数

我的代码的问题是:如果删除了一个集合,而下一个集合的行数比删除的集合的行数少,那么代码将错过该集合,并开始影响下一个集合

在提供的示例中,第一个集合(总计0)和第二个集合(0)都会获得分页符。删除第三组(=0)。由于第四个集合的行数小于第三个集合,因此代码出现在第五个集合中,该集合将被删除(=0),并将第四个集合与其一起删除。如果第五个集合不=0,它将保持第四个集合不变,并将分页符添加到第五个集合

代码如下:

Sub Hello()
    For Each myWorksheet In Worksheets
        myWorksheet.Activate
        With myWorksheet
            Dim Lastrow As Integer
            Lastrow = myWorksheet.UsedRange.Rows.Count
            Dim intLastStartRow As Integer
            intLastStartRow = 12
            For Each myCell In Range("B12:B" & Lastrow).Cells
                Dim lastRange As Range
                If (myCell.Borders(xlEdgeLeft).LineStyle <> xlNone) Then
                    Dim borderRange As Range
                    Set borderRange = myWorksheet.Range("B" & myCell.Row)
                    If (borderRange.Value <> 0) Then
                        myWorksheet.Rows(myCell.Row + 1).PageBreak = xlPageBreakManual
                        intLastStartRow = myCell.Row + 1
                    Else
                        myWorksheet.Rows(intLastStartRow & ":" & myCell.Row).Delete
                    End If
                End If
            Next
        End With
    Next
End Sub
Sub Hello()
对于工作表中的每个myWorksheet
我的工作表。激活
使用我的工作表
将最后一行设置为整数
Lastrow=myWorksheet.UsedRange.Rows.Count
Dim intLastStartRow为整数
intLastStartRow=12
对于范围内的每个菌丝体(“B12:B”和Lastrow)。细胞
将lastRange变暗为Range
如果(myCell.Borders(xlEdgeLeft).LineStyle xlNone),则
将边界范围变暗为范围
设置borderRange=myWorksheet.Range(“B”和myCell.Row)
如果为(borderRange.0)值,则
myWorksheet.Rows(myCell.Row+1).PageBreak=xlPageBreakManual
intLastStartRow=myCell.Row+1
其他的
myWorksheet.Rows(intLastStartRow&“:”&myCell.Row)。删除
如果结束
如果结束
下一个
以
下一个
端接头

我不能百分之百确定我是否理解这个问题,而且我从未尝试过为范围内的每个单元格删除带有
的行,但我怀疑它的失败方式与常规
For循环的失败方式相同。Excel在按正向顺序删除单元格时变得混乱;按相反的顺序,效果要好得多

这里的技巧可能是使用如下结构的循环:

last = myWorksheet.Cells(myWorksheet.Rows.Count, 2).End(xlUp).Row
For x = last to 12 Step -1
    'Do Stuff
Next x

使用一种相反的思维方式是有效的,我能够从中创造出一些东西。谢谢你的建议很高兴听到!这确实是一种乐趣。