嵌套的多个“Next变量”if then循环

时间:2015-10-01 01:49:16

标签: excel-vba loops variables vba excel

我有一个代码,我在命名范围内引用变量“k”,然后执行一系列嵌套的“if”循环。但是,我只能将“下一个k”放在子中的一个位置。但是,如果满足某些条件,我还需要代码循环回到下一个k。在添加第二个“Next k”语句时,我得到“Next Without For”错误。

以下是相关的代码段:

Set SFR = SF.Range("a2", SF.Range("a2").SpecialCells(xlCellTypeLastCell))
Set Sheetparent = Control.Range("b2", Control.Range("b2").End(xlDown))
Set SheetControl = Control.Range("a2", Control.Range("a2").End(xlDown))
Set TypeControl = Control.Range("c2", Control.Range("c2").End(xlDown))
Set BDMControl = Control.Range("E2", Control.Range("e2").End(xlDown))
Set ParentControl = Control.Range("f2", Control.Range("f2").End(xlDown))

        If r.Value = POp.Name Then

        For Each k In SFR

            If SFR(k.Row, 6).Value = r.Offset(0, 1).Value Then

                For Each b In ParentControl

                    If SFR(k.Row, 1).Value = ParentControl(b.Row, 1).Offset(0, -1).Value Then

                    With POp.Range("a2")
                    .Offset(i, 0).Value = SFR(k.Row, 3).Value
                    .Offset(i, 1).Value = SFR(k.Row, 4).Value
                    .Offset(i, 2).Value = SFR(k.Row, 1).Value
                    .Offset(i, 3).Value = SFR(k.Row, 4).Value
                    .Offset(i, 4).Value = SFR(k.Row, 6).Value
                    .Offset(i, 5).Value = SFR(k.Row, 8).Value
                    .Offset(i, 6).Value = SFR(k.Row, 9).Value
                    .Offset(i, 7).Value = SFR(k.Row, 10).Value
                    .Offset(i, 8).Value = SFR(k.Row, 2).Value
                    .Offset(i, 9).Value = SFR(k.Row, 11).Value
                    .Offset(i, 10).Value = SFR(k.Row, 13).Value
                    .Offset(i, 11).Value = SFR(k.Row, 15).Value

                    End With

                    i = i + 1

                    Else

                End If

                Next b

        Else
        End If
        Next k



    Else

    End If

所以,问题是在公式移到下一个SFR k之前,我得到了几行重复​​的相同值SFR(k.row,[column])。我希望能够告诉宏转到下一个k,如果

If SFR(k.Row, 1).Value = ParentControl(b.Row, 1).Offset(0, -1).Value

是的,并且复制了值。有什么建议?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您必须使用goto语句。在下一个k之前放置一个标签,让它调用nextK,然后使用goto:

   For k In SFR
      .....
      if someCondition then goto nextK
      ....
nextK:
   next k