Voorwaardelijke Logica
Veeg om het menu te tonen
Tot nu toe ging alles over het opslaan en testen van waarden. Voorwaardelijke logica is waar je code daadwerkelijk beslissingen gaat nemen — het uitvoeren van het ene blok instructies in plaats van het andere, afhankelijk van de uitkomst van die tests.
If...Then
De eenvoudigste vorm: voer één actie uit, alleen als aan één voorwaarde wordt voldaan.
If currentStock < reorderLevel Then
MsgBox "Reorder needed!"
End If
Als de voorwaarde If is, slaat VBA simpelweg alles na End If over — er gebeurt niets en er treedt geen fout op.
If...ElseIf...Else
Behandelt meer dan twee mogelijke uitkomsten door voorwaarden te koppelen:
If currentStock = 0 Then
status = "Out of Stock"
ElseIf currentStock < reorderLevel Then
status = "Reorder Now"
ElseIf currentStock < reorderLevel * 2 Then
status = "Watch Closely"
Else
status = "Healthy"
End If
VBA controleert deze van boven naar beneden en stopt bij de allereerste voorwaarde die True is — de rest wordt niet meer gecontroleerd, zelfs als een latere voorwaarde technisch gezien ook True zou zijn. Dit is precies waarom de volgorde belangrijk is: als currentStock 0 is, wordt de eerste voorwaarde (= 0) direct opgepakt en krijgt status onmiddellijk de waarde "Out of Stock". Merk op dat 0 technisch gezien ook kleiner is dan reorderLevel, dus als de regel ElseIf currentStock < reorderLevel eerst zou worden gecontroleerd, zou er onterecht "Reorder Now" worden gerapporteerd voor een artikel dat volledig op is. Door de meest specifieke, meest urgente voorwaarde eerst te plaatsen — en pas daarna bredere voorwaarden te gebruiken — werkt een keten als deze correct.
Select Case
Wanneer je één enkele variabele controleert op meerdere mogelijke vaste waarden, zegt Select Case hetzelfde als een lange ElseIf-keten, maar het leest duidelijker:
Select Case category
Case "Electronics"
discountRate = 0.05
Case "Office"
discountRate = 0.1
Case Else
discountRate = 0
End Select
Select Case behandelt ook reeksen getallen op elegante wijze, wat moeilijker leesbaar is als een keten van ElseIf-vergelijkingen:
Select Case currentStock
Case 0
status = "Out of Stock"
Case 1 To 19
status = "Low"
Case 20 To 49
status = "Adequate"
Case Is >= 50
status = "Well Stocked"
End Select
Case 1 To 19 komt overeen met elke waarde van 1 tot en met 19; Case Is >= 50 gebruikt Is om te vergelijken met de variabele die wordt getest in plaats van een vaste reeks.
Opdracht
- Schrijf een
Submet eenSelect Case-blok (zoals hierboven) dat een statusstring toekent op basis van een hardcoded voorraadnummer. - Test deze drie keer binnen dezelfde
Subdoor de voorraadwaarde te wijzigen: probeer 0, 15 en 134, en print het resultaat telkens metDebug.Print. - Voeg een vierde conditie toe voor exact 20 (het reorder-niveau van het toetsenbord) en controleer welke Case deze opvangt.
1. Het schrijven van de Sub met Select Case
- Declareer één variabele om het voorraadnummer op te slaan en één om de resulterende tekst (
status) te bewaren. - Ken de voorraadvariabele eerst een vaste waarde toe (bijv.
stockLevel = 0), en voer deze vervolgens uit metSelect Case stockLevel— kopieer dezelfdeCase-structuur uit het voorbeeld van sectie 2.4 (Case 0,Case 1 To 19,Case 20 To 49,Case Is > 50). - Elke
Casemoet een andere tekstwaarde aanstatustoewijzen.
2. Drie waarden testen in één Sub
- Je hebt geen drie aparte procedures nodig — verander gewoon de waarde van de variabele, voer het
Select Case-blok uit, druk het resultaat af, verander vervolgens opnieuw de waarde en voer het nogmaals uit, allemaal binnen dezelfdeSub, direct achter elkaar. - Na elke toewijzing toont
Debug.Print statushet resultaat in het Direct-venster zonder pop-ups die de andere twee tests onderbreken.
3. Een case toevoegen voor precies 20
- Ga terug naar het oorspronkelijke voorbeeld uit sectie 2.4 en kijk goed waar
Case 1 To 19eindigt enCase 20 To 49begint — één van deze twee omvat 20 al. - Omdat
Select Casestopt bij de eerste overeenkomst, verandert het toevoegen van een aparteCase 20-regel alleen iets als je deze voor de case plaatst die het anders zou opvangen. - Voer het uit met
stockLevel = 20specifiek en controleer welk bericht wordt afgedrukt — dat vertelt je welkeCasehet daadwerkelijk heeft opgevangen, zonder dat je iets nieuws hoeft toe te voegen.
Sub ClassifyStockLevels()
Dim stockLevel As Integer
Dim status As String
' --- Test 1 ---
stockLevel = 0
Select Case stockLevel
Case 0
status = "Out of Stock"
Case 20
status = "Exactly at Reorder Level"
Case 1 To 19
status = "Low"
Case 20 To 49
status = "Adequate"
Case Is > 50
status = "Well Stocked"
End Select
Debug.Print stockLevel & " -> " & status
' --- Test 2 ---
stockLevel = 15
Select Case stockLevel
Case 0
status = "Out of Stock"
Case 20
status = "Exactly at Reorder Level"
Case 1 To 19
status = "Low"
Case 20 To 49
status = "Adequate"
Case Is > 50
status = "Well Stocked"
End Select
Debug.Print stockLevel & " -> " & status
' --- Test 3 ---
stockLevel = 134
Select Case stockLevel
Case 0
status = "Out of Stock"
Case 20
status = "Exactly at Reorder Level"
Case 1 To 19
status = "Low"
Case 20 To 49
status = "Adequate"
Case Is > 50
status = "Well Stocked"
End Select
Debug.Print stockLevel & " -> " & status
' --- Test 4: exactly 20 ---
stockLevel = 20
Select Case stockLevel
Case 0
status = "Out of Stock"
Case 20
status = "Exactly at Reorder Level"
Case 1 To 19
status = "Low"
Case 20 To 49
status = "Adequate"
Case Is > 50
status = "Well Stocked"
End Select
Debug.Print stockLevel & " -> " & status
End Sub
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.