"Faire Tout" "Loop" et "Tout" "Wend" en Boucle. Quelle est la différence?

Lecture de certaines réponses dans stackoverflow, j'ai vu un whilewend boucle. Je suis habitué à l' do whileloop, donc je me demandais quelle serait la différence entre ces deux boucles.

j'ai fait quelques tests (code ci-dessous) et les deux semblent me donner les mêmes résultats.

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
15
demandé sur Community 2015-09-23 01:54:49

3 réponses

Une réponse que j'ai évoqué n'est plus visible, mais cette réponse est toujours valable. While/Wend est une gueule de bois de Base et N'/Boucle doit être votre préféré la syntaxe parce que:

  1. Il prend en charge la vérification de la condition avant entrer dans la boucle Do While [condition] ... Loop (zéro, un ou plusieurs exécutions de la boucle)
  2. Il prend en charge la vérification de la condition après entrer dans la boucle Do ... Loop While [condition] (une ou plusieurs exécutions de la boucle)
  3. il supporte Non condition spécifique Do ...(some logic) (Exit Do) ... Loop (une ou plusieurs exécutions de la boucle, potentiellement infini)
21
répondu NeepNeepNeep 2017-10-22 15:15:03

je ne pense pas qu'il y est beaucoup de différence dans leur exécution, autres que la syntaxe des options While Wendn'est pas capable de:

Do
    someCode
While (someCondition)

en ce qui concerne la vitesse, j'ai fait un test simple:

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

Résultats:

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
6
répondu Vegard 2015-09-23 08:58:34

en fait, vous n'avez pas besoin de "DO WHILE" puisque vous pouvez "DO-LOOP" sans "While".

j'utilise "Do LOOP" si j'ai besoin d'effectuer une action au moins une fois (ou plusieurs fois) sans condition implicite, comme le fait le WHILE-WEND.

Juste pour un exemple, une sorte de réveil:

  Do
    Display Time at screen
    Sounds a buzz
    if user confirm
       exit do
    end if
  Loop
-1
répondu David BS 2015-09-22 23:04:04