루프

2011-05-05 6 views
37

위해 나는 루프

For x = LBound(arr) To UBound(arr) 

    sname = arr(x) 
    If instr(sname, "Configuration item") Then 
     '**(here i want to go to next x in loop and not complete the code below)** 

    '// other code to copy past and do various stuff 

Next x 

그래서 나는 단순히 문 Then Next x있을 수 있다고 생각 다음 코드를 가지고 있지만, 이것은 "아니오 문에 대해 선언 '오류가 계속.

If instr(sname, "Configuration item") Then 다음에 x의 다음 값으로 진행하려면 무엇을 넣을 수 있습니까?

+0

맞춤법을 고쳐 주신 분들께 고맙습니다. 사람들이 저를 도울 수있는 시간을 갖게되어서 고맙습니다. 건배 – DevilWAH

답변

29

이렇게 Next을 사용할 수 없습니다. 대신 GoTo 문을 사용하여 수행하려고하는 것과 같은 것을 얻을 수 있지만 대체로 인위적이고 비실용적 인 경우에는 GoTo을 예약해야합니다.

Do 

    '... do stuff your loop will be doing 

    ' skip to the end of the loop if necessary: 
    If <condition-to-go-to-next-iteration> Then GoTo ContinueLoop 

    '... do other stuff if the condition is not met 

ContinueLoop: 
Loop 
+2

루프 전체에 걸쳐 여러 조건이있을 때 더 깨끗하고 읽기 쉽습니다. 코드가 깊숙이 중첩되면 코더가 읽을 수 있도록 더 많은 헤드 스페이스가 필요합니다. 이런 이유로 GoTo가 더 좋을 수도 있고, Arlen Beiler의 답변도 괜찮은 해결책입니다. – pettys

+0

나는 그것이 더 나은 대답이 될 것이라고 동의한다 - 다른 질문으로. 이건 아니야. –

+0

VBA의 "계속적인"진술에 대한보다 일반적인 접근 방법을 찾고있는 사람들을 위해, 아래의 대체 답변에 이점이 있다는 점에 동의합니다. 나의 의도는 일반적인 경우의 절충안에 무게를 두어 토론을 심화시키는 것이었다. – pettys

65

당신은 GoTo가 사용할 수 있습니다 : 귀하의 경우

는 정말 간단하고 깨끗하고 읽을 수있는 대안이있다.

For x = LBound(arr) To UBound(arr) 
    sname = arr(x) 
    If InStr(sname, "Configuration item") Then 
     'Do nothing here, which automatically go to the next iteration 
    Else 
     'Code to perform the required action 
    End If 
Next x 
+7

+1 훌륭한 고토 성명서의 논리적이고 합리적인 선택에 +1 http://www.drdobbs.com/cpp/what-dijkstra-said-was-harmful-about-got/228700940 –

5

몇 년 늦게, 그러나 여기하는 또 다른 대안입니다 :

If Not InStr(sname, "Configuration item") Then 
     '// other code to copy past and do various stuff 
    End If 
9
For i=1 To 10 
    Do 
     'Do everything in here and 

     If I_Dont_Want_Finish_This_Loop Then 
      Exit Do 
     End If 

     'Of course, if I do want to finish it, 
     'I put more stuff here, and then... 

    Loop While False 'quit after one loop 
Next i 
+0

이것은 가장 간결한 방법으로 보인다. 내가 본 For 루프를 계속하기 위해 Goto를 사용하지 말라. 나는 당신이 다른 상황에서도 고토를 피하기 위해 같은 접근법을 적용 할 수 있다고 상상해보십시오 ... – tobriand

+0

좋은 대답입니다. Alfredo Yong의 대답은 같은 생각이지만 알프레도의 답은 크기가 작아서 더 읽기 쉽습니다. – pettys

0

가끔 두 번 할 루프 수행

Do 

    Do 

     If I_Don't_Want_to_Finish_This_Loop Then Exit Do 

     Exit Do 

    Loop 

Loop Until Done 

을이 "고토 스파게티"

12

후 년의 많은 데 ... 나는 일이에게 좋아하는 것을 피한다 :

For x = LBound(arr) To UBound(arr): Do 

    sname = arr(x) 
    If instr(sname, "Configuration item") Then Exit Do 

    '// other code to copy past and do various stuff 

Loop While False: Next x 
+0

!!! 천재 !!!!! – pashute