Loops in Visual Basic

By Herbert J. Bernstein

There are six major loop control structures in Visual Basic

• While ( expression )
statements(s)
Wend
• Do While ( expression )
statements(s)
Loop
• Do Until ( expression )
statements(s)
Loop
• Do
statements(s)
Loop While
( expression )
• Do
statements(s)
Loop Until
( expression )
• For variable = expression_1 To expression_2 Step expression_3
statement(s)
Next variable

The first two forms have the same meaning. The use of Until has the opposite meaning to the use of While. When While is used, the loop executes if the expression is true. When Until is used the loop executes is the expression is false. Putting the Until or While at the end of the loop causes the loop statement(s) to be executed before the test is made on the condition.

The For...Next loop for positive steps is equivalent to

variable = expression_1

While ( variable <= expression_2 )
statements(s)

variable = variable + expression_3
Wend

If the increment given in expression_3 is 1, the Step expression_3 may be dropped.

Thus we may modify the example given in converting strings of digits to numbers by changing the While…Wend loop to a For…Next loop

```Private Function condexp(condition, exp1, exp2) As Variant
If (condition) Then
condexp = exp1
Else
condexp = exp2
End If
End Function

Private Function myatod(xstring\$) As Double

Dim digfound As Integer  ' flag for digit found
Dim isign As Integer     ' flag for sign
'   0 = not found, 1 = '+', -1 = '-'
Dim decpos As Integer    ' position after the decimal point
Dim xpow10 As Double     ' next (negative) power of ten
Dim ipos As Integer      ' position within string
Dim idig As Integer      ' current numeric digit
Dim char as String       ' next character from string

digfound = 0
isign = 0
decpos = 0
xpow10 = 1.#
Rem ipos = 0
myatod = 0.#

Rem While (ipos < Len(xstring))
Rem ipos = ipos + 1
For ipos = 1 To Len(xstring)
c = mid\$(xstring,ipos,1)
Select Case (c)
Case "0"
idig = 0
digfound = 1
Case "1"
idig = 1
digfound = 1
Case "2"
idig = 2
digfound = 1
Case "3"
idig = 3
digfound = 1
Case "4"
idig = 4
digfound = 1
Case "5"
idig = 5
digfound = 1
Case "6"
idig = 6
digfound = 1
Case "7"
idig = 7
digfound = 1
Case "8"
idig = 8
digfound = 1
Case "9"
idig = 9
digfound = 1
Case "."
If ( decpos = 0 ) Then
idig = 0
digfound = -1
decpos = decpos+1
xpow10 = xpow10/10.#
Else
If ( isign <>0 ) Then
myatod = CDbl(isign)*myatod
Exit Function
EndIf
EndIf
Case "-", "+"
If (isign = 0 And digfound = 0) Then
isign = condexp( (c = "-") , -1, 1)
Else
If (isign <> 0 ) Then
myatod = CDbl(isign)*myatod
End If
Exit Function
EndIf
Case Else
idig = -1
End Select
If (idig = -1) Then
If (isign <> 0 ) Then
myatod = CDbl(isign)*myatod
EndIf
Exit Function
Else
If (digfound > 0) Then
If ( decpos = 0 ) Then
myatod = myatod*10.# + CDbl(idig)
Else
myatod = myatod + CDbl(idig)*xpow10
decpos = decpos +1
xpow10 = xpow10/10.#
End If
End If
End If
Rem Wend
Next ipos
If (isign <> 0 ) Then
myatod = CDbl(isign)*myatod
End If
End Function

Private Sub Command1_Click()
Picture1.Cls
Picture1.Print myatod(Text1.text)
End Sub```