2015-09-22 29 views
12

Leggendo alcune risposte nello stackoverflow ho visto un ciclo whilewend. Sono abituato allo do whileloop, quindi mi chiedevo quale sarebbe stata la differenza tra questi due anelli."Do While" "Loop" e "While" "Wend" Loop. Qual è la differenza?

Ho eseguito alcuni test (codice di seguito) ed entrambi sembrano darmi gli stessi risultati.

Sub test_loop_1() 
Dim i As Integer 
i = 1 
Do While i < 10 
    Cells(i, 1) = i 
    i = i + 1 
Loop 

End Sub 

Sub test_loop_2() 
Dim i As Integer 
i = 1 
While i < 10 
    Cells(i, 1) = i 
    i = i + 1 
Wend 

End Sub 
+2

Abbastanza buono [informazioni qui] (https://msdn.microsoft.com/en-us/library/zh1f56zs.aspx). 'While' loop verifica sempre la condizione prima in cui il ciclo' do' fornisce maggiore flessibilità su dove testare le proprie condizioni. Sembra che il ciclo 'While' possa sempre essere sostituito con un ciclo' do while'. –

+0

Inoltre, non è possibile usare "Esci mentre". –

risposta

15

Una risposta a cui ho fatto riferimento non è più visibile, ma questa risposta è ancora valida. Mentre/Wend è una sbornia da Basic e Do/Loop dovrebbe essere la vostra sintassi preferita perché:

  1. Supporta controllo delle condizioni prima entrare nel ciclo Do While [condition] ... Loop (zero o più esecuzioni di loop)
  2. Sostiene verifica dello stato dopo entrare nel ciclo Do ... Loop While [condition] (uno o più esecuzioni anello)
  3. Esso supporta nessuna condizione specifica Do ...(some logic) (Exit Do) ... Loop (uno o più esecuzioni di loop, potenzialmente infinito)
+0

Non c'è un "Exit While" in VBA? Anche un utente ha commentato che "While Wend" sarebbe una versione precedente di "Do While" mantenuta per compatibilità con le versioni precedenti. Sai se è vero? @NeepNeepNeep – umLu

+2

"Exit While" non esiste e sì, credo che While/Wend sia mantenuto per compatibilità con le versioni precedenti. Davvero, sarà Do/Loop che dovresti usare. – NeepNeepNeep

+0

Il commento di @vsoraas non sembra più essere visualizzato. – Panzercrisis

0

In realtà, è necessario Non tiratevi "DO, mentre" in quanto si può "DO-LOOP" senza "Mentre".

Io uso "DO LOOP" se ho bisogno di eseguire un'azione almeno una volta (o più volte) senza alcuna condizione implicita, come il WHILE-WEND obbedisce.

Solo per un caso, una sorta di sveglia:

Do 
    Display Time at screen 
    Sounds a buzz 
    if user confirm 
     exit do 
    end if 
    Loop 
+0

Interessante, ma sembra essere la differenza tra "do loop" e "do while loop". Non proprio quello che ho chiesto. – umLu

6

Non credo ci sia molta differenza nella loro esecuzione oltre alle opzioni sintattiche che While Wend non è in grado di:

Do 
    someCode 
While (someCondition) 

quanto riguarda la velocità, ho fatto un semplice test:

Sub whileLoopTest() 
Dim i As Long, j As Long 
Dim StartTime As Variant 

i = 1 
StartTime = Timer 

While (i < 500000000) 
    j = i + 2 
    i = i + 1 
Wend 

Debug.Print "While execution time: " & Timer - StartTime 
End Sub 


Sub doWhileTest() 
Dim i As Long, j As Long 
Dim StartTime As Variant 

i = 1 
StartTime = Timer 

Do While (i < 500000000) 
    j = i + 2 
    i = i + 1 
Loop 

Debug.Print "Do While execution time: " & Timer - StartTime 
End Sub 

Risultato s:

While execution time: 6,429688 
While execution time: 6,429688 
While execution time: 6,441406 
Do While execution time: 6,429688 
Do While execution time: 6,449219 
Do While execution time: 6,4375 
+0

Per quanto riguarda la velocità sembra più o meno lo stesso per me. Perché dovrebbe essere creato un ciclo che è esattamente lo stesso, solo senza alcune caratteristiche? Un utente ha commentato (ed è stato eliminato, non so perché) che "While Wend" sarebbe una versione precedente di "Do While" mantenuta per compatibilità con le versioni precedenti. Sai se è vero? @vsoraas – umLu

+1

@umLu Non lo saprei per certo, ma sembrerebbe logico che "While Wend" sia arrivato per primo, e poi "Do While" è stato introdotto in seguito con sintassi e caratteristiche aggiuntive e migliori. – Vegard