VBA For Loop STUCK

时间:2017-10-11 17:11:10

标签: vba loops for-loop insert

我有一个贯穿所有行的For循环(它也合并了插入的行)...我遇到的路障是在经过我插入行的行时将其抛弃。

示例:

在A之后添加5行而不是转到B,它将转到A。

下的其中一行

初看

  • A
  • B
  • C
  • d

First Pass在A。

下添加5个空白行

第二遍继续在A之后增加更多空间而不是跳到B。

For Each x In wksProd.Range("A3", "A" & iRow)
If x <> "0" Then
    Rows(x.Row).EntireRow.Offset(1).Resize(5).Insert
    With Range(x.Address, ConvertToLetter(x.Column) & x.Row + 5)
        .Merge
        .VerticalAlignment = xlCenter
    End With
    With Range(ConvertToLetter(x.Column + 1) & x.Row, ConvertToLetter(x.Column + 1) & x.Row + 5)
        .Merge
        .VerticalAlignment = xlCenter
    End With
    <-- some other formatting code here -->
End If
Next x

2 个答案:

答案 0 :(得分:0)

您已在工作表wksProd上循环,但对任何工作表进行处理恰好是ActiveSheet

我已使用*stars*突出显示了对活动工作表的隐式引用:

For Each x In wksProd.Range("A3", "A" & iRow)
If x <> "0" Then
    *Rows*(x.Row).EntireRow.Offset(1).Resize(5).Insert
    With *Range*(x.Address, ConvertToLetter(x.Column) & x.Row + 5)
        .Merge
        .VerticalAlignment = xlCenter
    End With
    With *Range*(ConvertToLetter(x.Column + 1) & x.Row, ConvertToLetter(x.Column + 1) & x.Row + 5)
        .Merge
        .VerticalAlignment = xlCenter
    End With
    <-- some other formatting code here -->
End If
Next x

你可能还有更多。确保您使用wksProd - 它可能是也可能不是活动表。如果不是,那么您在错误的工作表中插入行。如果是的话,那么当你正在迭代它时 修改一个集合 - 并且这绝不是一个好主意。

Rows(x.Row).EntireRow.Offset(1).Resize(5).Insert

答案 1 :(得分:0)

Thx Mat's Mug - 这解决了它(使用For with Step vs For Each。

    For x = 3 To ((iRow + 2) * 5) Step 6
    wksProd.Rows(x).EntireRow.Offset(1).Resize(5).Insert
    With wksProd.Range("A" & x, "A" & x + 5)
        .Merge
        .VerticalAlignment = xlCenter
    End With
    With wksProd.Range("B" & x, "B" & x + 5)
        .Merge
        .VerticalAlignment = xlCenter
    End With
    <-- some other formatting code here -->
Next x