2011-05-05 108 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 2013-11-20 13:59:00

回答

29

您不能使用Next那樣的。您可以使用GoTo聲明來實現類似於您試圖執行的操作,但實際上,GoTo應該保留用於替代方法設計且不切實際的情況。

在你的情況,有一個非常簡單的,乾淨的,可讀的選擇:

If Not InStr(sname, "Configuration item") Then 
     '// other code to copy past and do various stuff 
    End If 
+2

當你在整個循環中有幾個條件時,這不太乾淨和可讀。隨着代碼更深入的嵌套,編碼器試圖讀取它需要更多的空間。出於這個原因,GoTo在這裏可能會更好,而Arlen Beiler的回答是另一個體面的解決方案。 – pettys 2016-05-27 15:32:57

+0

我同意,這將是更好的答案 - 一個不同的問題。不是這個。 – 2016-05-28 10:18:11

+0

聽起來好像我們同意,對於那些尋找VBA缺乏「繼續」聲明的更一般方法的人來說,下面的替代答案具有優勢。我的意圖僅僅是通過權衡一般情況下的權衡來加深討論。 – pettys 2016-05-31 17:26:28

65

您可以使用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 
+7

+1對古老goto聲明的邏輯和理性選擇+1 http://www.drdobbs.com/cpp/what-dijkstra-said-was-harmful-about-got/228700940 – 2015-01-19 20:24:53

5

幾年晚,但這裏是另一種選擇。

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 
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

這看起來是最好的方式退出使用Goto繼續我見過的For循環。我想象一下,在其他情況下,您也可以採用相同的方法來避免Goto ... – tobriand 2015-05-29 16:24:25

+0

好的答案。 Alfredo Yong的回答是一樣的想法,但阿爾弗雷多的答案的緊湊性使其對我更具可讀性。 – pettys 2016-05-27 15:33:50

0

我有時會做一個雙do循環:

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 2016-11-09 15:06:42