使用GoTo后返回循环

时间:2012-03-04 14:08:53

标签: vba

我尝试了几种方法,但没有成功。我的问题是 - 运行loop1,如果满足某些条件,运行loop2直到满足某些条件,返回loop1。

sub program()
Dim i As Integer
Dim q As Integer

For i=1 to 350
If Range("A"&i).value=1 And Range("D"&i).Value<15 Then Goto 1
Next i

1:q=0
  Do While List1.Range("A"&i+q).Value<>""
  Range("E"&i+q)="K"
  q=q+1
  Loop

End Sub

我没有找到如何在执行“1循环”后返回“For Next Loop”并继续下一个i的方式返回。也许这是不可能的,我必须在第一个循环中包含某种代码?!谢谢

3 个答案:

答案 0 :(得分:3)

1处的代码放入函数中并调用它而不是使用goto。当函数退出时,您的第一个循环将从它停止的位置继续执行。

答案 1 :(得分:1)

我实际上并不知道VBA(我上次在1996年左右使用过VB),但这应该或多或少是正确的:

sub program()
Dim i As Integer
Dim q As Integer

i = 1
Do while i <= 350
  If Range("A"&i).value=1 And Range("D"&i).Value<15 Then
    Do While i <= 350 And List1.Range("A"&i).Value<>""
      Range("E"&i)="K"
      i=i+1
    Loop
  Else
      i=i+1
  End If
Loop
end do
End Sub

答案 2 :(得分:0)

即使MSDN也禁止使用GoTo(你只能将它用于与Resume配对的错误处理),但是既然你问过,这就是方法:

Sub program()
    Dim i As Integer
    Dim q As Integer

    For i=1 to 350
        If ((Range("A"&i).value=1) And (Range("D"&i).Value<15)) Then Goto OtherLoop
FirstLoop:
    Next i

Exit Sub

OtherLoop:
   q=0
   Do While List1.Range("A"&i+q).Value<>""
       Range("E"&i+q)="K"
       q=q+1
   Loop
   Goto FirstLoop

End Sub

当完成“FirstLoop”时,您需要使用Exit语句来防止代码进入“OtherLoop”,并且还需要告诉它返回到您之前的位置。 再次,避免使用这些东西。循环中的循环( 缩进 组织,请)和辅助过程调用(调用另一个子或函数)更值得推荐。

相关问题