Visual Basic tip: Controlling code execution: Do... While


 

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.