|
Wanneer je als VBA
programmeur code schrijft, komt het bijna nooit voor dat het
programma regel voor regel tot het einde doorloopt. Er zullen altijd
situaties zijn waarbij sommige regels moeten worden overgeslagen, of
waarbij een bepaalde procedure één of meerdere keren moet worden
herhaald. Dit aspect van programmeren noemt men
Controlling code
execution. Om dit uitvoeren van de programmacode gecontroleerd te
kunnen later verlopen, kun je
Loops
gebruiken. Looping is het proces waarbij een aantal regels code
wordt herhaald en is een fundamenteel aspect van elke
programmeertaal.
Er zijn verschillende
soorten
Loops.
Dit voorbeeld behandelt de
Do... While
variant.
De essentie van een
Do... While
Loop is dat elke instructie in de loop wordt uitgevoerd
zo lang
een bepaalde voorwaarde waar is. De syntax van
deze loop is als volgt.
Do While condition
Instructions
[Exit
Do]
[Instructions]
Loop
Als alternatief kun je
de Do... While
Loop ook op deze wijze gebruiken.
Do
Instructions
[Exit
Do]
[Instructions]
Loop While condition
Het verschil tussen deze
Loops is het moment in tijd waarop de instructies worden uitgevoerd.
In de eerste Loop kan het voorkomen dat de instructies nooit worden
uitgevoerd, omdat het resultaat van de voorwaarde die wordt
geëvalueerd, meteen
Onwaar
is. In de tweede Loop worden alle instructies in ieder geval één
keer uitgevoerd. Dit maakt duidelijk dat het essentieel is waar de
voorwaarde in de loop wordt opgenomen.
!!
Tekst tussen [ ]
betekent dat deze onderdelen van de Loop optioneel zijn.
Alle instructies tussen
Do
en While
kunnen dus één, of meerdere keren worden uitgevoerd. Dit aantal hangt af van
de voorwaarde (While
condition). Als
het resultaat van de voorwaarde
Onwaar
is, wordt de Loop beëindigt.
De procedure hieronder
verduidelijkt de
Do... While Loop.
Het werkboek waar dit voorbeeld instaat, kun je hier
downloaden.
Option Explicit
Private Sub cbDo_While_Click()
Dim cRecData As Integer
cRecData = 10
Do While Cells(cRecData, 4) = "Claudia"
If Cells(cRecData, 3) > 5000 Then
With
Cells(cRecData, 3)
.Interior.Color = RGB(192, 0, 0)
.Font.Color = RGB(255, 255, 255)
End With
End If
If Cells(cRecData, 3) = 0 Then
Cells(cRecData, 3).Select
Exit Do
End If
cRecData = cRecData + 1
Loop
Cells(10, 2).Select
End Sub
De bovenstaande procedure,
die wordt uitgevoerd als op de knop
cbDo_While
wordt geklikt, werkt als
volgt.
•
De
Do... While
loop voert een aantal instructies uit, zo lang (Do
While) de 4e
kolom van een rij (Cells(cRecData,
4)) de waarde "Claudia"
heeft
•
Als de waarde in een
bepaalde rij van kolom C (cRecData,
3) groter is dan
5000,
wordt de achtergrondkleur en de kleur van het lettertype aangepast
•
Als de waarde in een
bepaalde rij van kolom C (cRecData,
3)
0
is, wordt de betreffende cel geselecteerd (Cells(cRecData,
3).Select)
en de loop
afgebroken (Exit
For)
•
Als alle instructies
zijn uitgevoerd, wordt het rijnummer met één verhoogd (cRecData
= cRecData + 1)
en begint de evaluatie van de voorwaarde opnieuw.
|