我有一个从带有大量表格的SQL报表创建的Excel文件。我已经完成了根据单元格值删除行或添加分页符的任务。
这是一个Google电子表格,显示了我的Excel的基本版本。 https://docs.google.com/spreadsheets/d/1cvDuVpu3NQqMf7wkj8D3DB1y54TmczaSbTZbx_26sd8/edit?usp=sharing
如果设置的总计不为0,则会添加分页符。如果集合的总计为0,则删除该集合。如果其单元格具有左边界,则知道总数。我的代码的问题是:如果删除了一个集合,并且下一个集合的行数低于删除的集合,则代码会错过该集合并开始影响以下集合(请原谅我的不良解释)。
在提供的示例中,FIRST集(总<> 0)和SECOND set(<> 0)各自获得分页符。删除THIRD集(= 0)。由于FOURTH集的行数小于THIRD,因此代码出现在FIFTH集中,该集合被删除(= 0)并删除其设置的FOURTH集。如果FIFTH设置不是= 0,它将保持第四组不变,并将分页符添加到第五组。
这里是使用以下代码的VBA for Excel代码:
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
答案 0 :(得分:1)
我不是100%确定我理解这个问题而且我从未尝试删除带有For Each cell In range
循环的行,但我怀疑它与常规For-Loop
的失败方式相同。以正向顺序删除单元格时Excel变得混乱;它以相反的顺序工作得更好。
这里的技巧可能是使用这样结构的循环:
last = myWorksheet.Cells(myWorksheet.Rows.Count, 2).End(xlUp).Row
For x = last to 12 Step -1
'Do Stuff
Next x