Onderwerp


Controlling code execution:
Do... While



Informatie


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.