Onderwerp


Controlling code execution:
For... Next



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 For... Next variant.
 
De essentie van een For... Next loop is dat elke instructie in de Loop (in principe) meerdere keren wordt uitgevoerd. De syntax van deze loop is als volgt.

For Counter = Start to End [Step StepValue]
Instructions
[Exit For]
[Instructions]
Next [Counter]

 
!! Tekst tussen [ ] betekent dat deze onderdelen van de Loop optioneel zijn.
 
Alle instructies tussen For en Next worden meerdere keren uitgevoerd. Het aantal keren dat deze instructies worden uitgevoerd, hangt af van de waarde die de variabele Counter heeft (Start to End) en of de Loop vroegtijdig moet worden afgebroken (Exit For) omdat er aan een bepaalde uitzondering wordt voldaan. De optie Step StepValue geeft je de mogelijkheid om een Loop te doorlopen waarbij je de code alleen bij elke 5e (Step 5), of elke 10e (Step 10) waarde van de variabele Counter uitvoert.
 
De procedure hieronder verduidelijkt de For... Next Loop. Het werkboek waar dit voorbeeld instaat, kun je hier downloaden.
 
Option Explicit
Private Sub cbFor_Next_Click()
Dim cRecData As Integer For cRecData = 10 To 359
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 For
End If
Next cRecData

If cRecData > 359 Then
Cells(10, 2).Select
End If
End Sub


De bovenstaande procedure, die wordt uitgevoerd als op de knop cbFor_Next wordt geklikt, werkt als volgt.
- De For... Next loop voert een aantal instructies uit als de variabele cRecData de waarde 10 t/m 359 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 de variabele cRecData groter is dan 359 (en de Loop dus helemaal doorlopen is), wordt de eerste cel in de database geselecteerd.