2011-05-05 46 views
37

ben döngü

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 

yüzden ben sadece açıklama Then Next x olabilir düşündüm aşağıdaki kodu var, ama bu bir "ifadesi için ilan" hata veriyor devam edin.

If instr(sname, "Configuration item") Then'dan sonra x için bir sonraki değere ilerletmek için ne koyabilirim?

+0

Yazım hatası yapan kullanıcılara teşekkür ederim, biliyorum ki ben de emziriyorum. İnsanların bana yardımcı olmak için zaman alacağı için minnettarım. Cheers – DevilWAH

cevap

29

Next bunu kullanamazsınız. Bunun yerine, GoTo ifadesini kullanarak yapmaya çalıştığınız şey gibi bir şey başarabiliyorsunuz, ancak alternatiflerin giriştiği ve uygulanamadığı durumlar için GoTo gerçekten ayrılmalıdır.

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

Döngüsünüzde olduğu gibi birçok koşulunuz olduğunda bu daha az temiz ve okunabilir. Kod daha derinlemesine iç içe geçtikçe, kodlayıcıyı okumaya çalışırken daha fazla kafa boşluğu gerektirir. Bu nedenle GoTo burada daha iyi olabilir ve Arlen Beiler'in cevabı başka bir iyi çözümdür. – pettys

+0

Katılıyorum, bunlar daha iyi cevaplar olurdu - farklı bir soruya. Buna değil. –

+0

VBA’nın "devam" ifadesiyle ilgili daha genel bir yaklaşım arayanlar için aşağıdaki alternatif cevapların avantajları olduğunu kabul ediyoruz. Amacım, tartışmayı genel davada tartarak tartışmayı derinleştirmek oldu. – pettys

65

Bir GoTo kullanabilirsiniz: Senin durumunda

, gerçekten, basit, temiz ve okunabilir bir alternatif var.

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 saygıdeğer goto açıklamasının mantıklı ve rasyonel seçiminde +1 http://www.drdobbs.com/cpp/what-dijkstra-said-was-harmful-about-got/228700940 –

5

Birkaç yıl geç, ama burada başka bir alternatiftir:

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

Bu, en temiz yol olarak görünüyor. Gördüğüm döngüler için devam etmek için Goto'yu kullan. Ben de aynı yaklaşımı diğer durumlarda da Goto'dan sakınmak için uyarlayabileceğinizi düşünün, bu konuda ... – tobriand

+0

İyi cevap. Alfredo Yong'un cevabı aynı düşüncedir, ancak aynı şekilde Alfred'ın cevapları benim için daha okunabilir hale getirmektedir. – pettys

0

bazen bir çift yapmak döngü yapın:

Do 

    Do 

     If I_Don't_Want_to_Finish_This_Loop Then Exit Do 

     Exit Do 

    Loop 

Loop Until Done 

Bu "git spagetti"

12

yıl sonra bir çok sahip ... Ben kimse bu gibi kaçınır:

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

!!! Genius !!!!! – pashute