Reading some answers in stackoverflow I saw a
wend loop. I’m used to the
loop, so I was wondering what would be the difference between this two loops.
I did some testing (code below) and both seem to give me the same results.
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
An answer I referred to is no longer visible, but this answer still holds true. While/Wend is a hangover from Basic and Do/Loop should be your preferred syntax because:
- It supports checking the condition before entering the loop
(zero or more loop executions)
Do While [condition] ... Loop
- It supports checking the condition after entering the loop
(one or more loop executions)
Do ... Loop While [condition]
- It supports no specific condition
(one or more loop executions, potentially infinite)
Do ...(some logic) (Exit Do) ... Loop
I don’t think there is much of a difference in their execution other than the syntactical options that
While Wendis not capable of:
Do someCode While (someCondition)
As for speed, I did a simple 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
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
In fact, you don´t need “DO WHILE” since you may “DO-LOOP” without “While”.
I utilize “DO LOOP” if I need to perform an action at least one time (or several times) with no implicit condition, as the WHILE-WEND forces.
Just for an instance, a kind of alarm clock:
Do Display Time at screen Sounds a buzz if user confirm exit do end if Loop