Je Eerste VBA-Procedure Schrijven
Veeg om het menu te tonen
Macro's opnemen leert je de woordenschat; er zelf één schrijven is waar je begint te denken als een programmeur.
De opbouw van een Sub-procedure
Elk herbruikbaar blok VBA-code dat een actie uitvoert (en geen waarde retourneert, dat is een Function) wordt geschreven als een Sub:
Sub ProcedureName()
' instructions go here
End Sub
Plaats de cursor ergens in een Sub en druk op F5 (of klik op de groene Uitvoeren-pijl) om deze uit te voeren. Commentaar — elke regel die begint met een apostrof (') — wordt volledig genegeerd door VBA; gebruik ze ruim om uit te leggen waarom code iets doet, niet alleen wat het doet, want het wat is meestal duidelijk uit de code zelf.
Opmaakgewoonten die direct resultaat opleveren
- Typ
Option Explicithelemaal bovenaan elk module — dit dwingt je om elke variabele te declareren, waardoor typefouten worden opgemerkt voordat ze bugs worden; - Laat code binnen lussen en
If-blokken één Tab inspringen — de VBE dwingt dit niet af, maar niet-ingesprongen code wordt snel onleesbaar; - Gebruik beschrijvende namen (
HighEarnerCount, nietx) — je zult jezelf over drie weken dankbaar zijn.
Voorbeeld: Hoogverdieners markeren
We schrijven handmatig een procedure die elke werknemer in de tabel doorloopt en iedereen markeert die meer dan $55,000 verdient — iets wat de macrorecorder nooit kan, omdat het een beslissing vereist (een If-statement) die voor elke rij (een lus) wordt herhaald.
Option Explicit
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
Dim ws As Worksheet / Dim i As Long— deze declareren twee variabelen:wsbevat een verwijzing naar het Employees sheet, enitelt de rijen;- Set
ws = ThisWorkbook.Worksheets("Employees")— dit is de objectmodel-gewoonte: benoem het werkblad expliciet in plaats van te vertrouwen op het actieve blad; ws.Cells(ws.Rows.Count, 1).End(xlUp).Row— een standaardmethode om de laatste gebruikte rij in kolomAte vinden, ongeacht het aantal werknemers in de tabel;For i = 2 To lastRow ... Next i— een lus die de code herhaalt voor elke gegevensrij, beginnend bij rij 2 om de kop over te slaan;- If
ws.Cells(i, 6).Value > 55000 Then— een beslissing: alleen rijen waar de kolom Salary (kolom 6) meer dan 55000 is, worden opgemaakt; MsgBox— een eenvoudige pop-up ter bevestiging dat de macro klaar is.
Typ deze procedure in modIntro, plaats de cursor erin en druk op F5. Controleer de getallen zelf — Emma Davis en Olivia Brown zijn de twee medewerkers die meer dan $55.000 verdienen in de voorbeeldtabel.
Taak
- Typ
HighlightTopEarnersprecies zoals weergegeven in modIntro en voer het uit. Bevestig dat twee rijen groen worden. - Dupliceer de procedure als
HighlightITDepartmenten wijzig de voorwaarde zodat elke rij wordt gemarkeerd waarbij de afdeling (kolom 3) gelijk is aan "IT" in plaats van het controleren van het salaris. - Voeg boven elke procedure een opmerking toe die in één zin uitlegt wat deze doet — oefen met het schrijven van opmerkingen voor de lezer, niet voor jezelf.
- Sla het werkboek opnieuw op (het is nog steeds
.xlsm, dus een normaleCtrl+Sis voldoende).
- Selecteer de volledige
HighlightTopEarners-procedure (vanSubtotEnd Sub), kopieer deze en plak hem direct onder zichzelf inmodIntro. - Hernoem de tweede kopie van de
Sub-regel naarSub HighlightITDepartment()— elke procedure in een module moet een unieke naam hebben, anders weet VBA niet welke je bedoelt wanneer je deze probeert uit te voeren. - De voorwaarde die je moet wijzigen is de
If-regel. Op dit moment controleert deze een getal:
If ws.Cells(i, 6).Value > 55000 Then
Je moet nu tekst controleren — kolom 3 (Department) moet gelijk zijn aan "IT". Onthoud uit hoofdstuk 2 dat tekstvergelijkingen aanhalingstekens rond de waarde vereisen en gebruik = in plaats van >.
4. Alles binnen de lus (de Interior.Color-regel, de structuur van de lus zelf) kan hetzelfde blijven — alleen de te testen voorwaarde verandert.
Opmerkingen toevoegen
- Een opmerking begint met een apostrof (
') en staat op een eigen regel direct boven deSub-regel — niet binnen de procedure. - Schrijf deze alsof je de macro uitlegt aan een collega die deze nog nooit heeft gezien, niet als geheugensteuntje voor jezelf. Vergelijk:
- Minder nuttig:
' loops through rows(beschrijft hoe, wat de code al laat zien) - Meer nuttig:
' Highlights employees earning over $55,000(beschrijft wat het oplevert, wat niet direct duidelijk is)
- Minder nuttig:
- Doe hetzelfde voor de tweede procedure — één zin die beschrijft wat deze markeert en waarom, in termen van het zakelijke doel (IT-afdelingsmedewerkers), niet de technische werking van de lus.
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 3).Value = "IT" Then
ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — IT department is highlighted."
End Sub
Typ beide in modIntro, voer eerst HighlightTopEarners uit en controleer dat precies twee rijen groen worden (Emma Davis bij $62.000 en Sophia Miller bij $59.000 — de andere drie zitten op of onder $55.000), voer daarna HighlightITDepartment uit en controleer dat de rij van Sophia Miller wordt gemarkeerd. Sla op met Ctrl+S zodra beide werken.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Je Eerste VBA-Procedure Schrijven
Macro's opnemen leert je de woordenschat; er zelf één schrijven is waar je begint te denken als een programmeur.
De opbouw van een Sub-procedure
Elk herbruikbaar blok VBA-code dat een actie uitvoert (en geen waarde retourneert, dat is een Function) wordt geschreven als een Sub:
Sub ProcedureName()
' instructions go here
End Sub
Plaats de cursor ergens in een Sub en druk op F5 (of klik op de groene Uitvoeren-pijl) om deze uit te voeren. Commentaar — elke regel die begint met een apostrof (') — wordt volledig genegeerd door VBA; gebruik ze ruim om uit te leggen waarom code iets doet, niet alleen wat het doet, want het wat is meestal duidelijk uit de code zelf.
Opmaakgewoonten die direct resultaat opleveren
- Typ
Option Explicithelemaal bovenaan elk module — dit dwingt je om elke variabele te declareren, waardoor typefouten worden opgemerkt voordat ze bugs worden; - Laat code binnen lussen en
If-blokken één Tab inspringen — de VBE dwingt dit niet af, maar niet-ingesprongen code wordt snel onleesbaar; - Gebruik beschrijvende namen (
HighEarnerCount, nietx) — je zult jezelf over drie weken dankbaar zijn.
Voorbeeld: Hoogverdieners markeren
We schrijven handmatig een procedure die elke werknemer in de tabel doorloopt en iedereen markeert die meer dan $55,000 verdient — iets wat de macrorecorder nooit kan, omdat het een beslissing vereist (een If-statement) die voor elke rij (een lus) wordt herhaald.
Option Explicit
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
Dim ws As Worksheet / Dim i As Long— deze declareren twee variabelen:wsbevat een verwijzing naar het Employees sheet, enitelt de rijen;- Set
ws = ThisWorkbook.Worksheets("Employees")— dit is de objectmodel-gewoonte: benoem het werkblad expliciet in plaats van te vertrouwen op het actieve blad; ws.Cells(ws.Rows.Count, 1).End(xlUp).Row— een standaardmethode om de laatste gebruikte rij in kolomAte vinden, ongeacht het aantal werknemers in de tabel;For i = 2 To lastRow ... Next i— een lus die de code herhaalt voor elke gegevensrij, beginnend bij rij 2 om de kop over te slaan;- If
ws.Cells(i, 6).Value > 55000 Then— een beslissing: alleen rijen waar de kolom Salary (kolom 6) meer dan 55000 is, worden opgemaakt; MsgBox— een eenvoudige pop-up ter bevestiging dat de macro klaar is.
Typ deze procedure in modIntro, plaats de cursor erin en druk op F5. Controleer de getallen zelf — Emma Davis en Olivia Brown zijn de twee medewerkers die meer dan $55.000 verdienen in de voorbeeldtabel.
Taak
- Typ
HighlightTopEarnersprecies zoals weergegeven in modIntro en voer het uit. Bevestig dat twee rijen groen worden. - Dupliceer de procedure als
HighlightITDepartmenten wijzig de voorwaarde zodat elke rij wordt gemarkeerd waarbij de afdeling (kolom 3) gelijk is aan "IT" in plaats van het controleren van het salaris. - Voeg boven elke procedure een opmerking toe die in één zin uitlegt wat deze doet — oefen met het schrijven van opmerkingen voor de lezer, niet voor jezelf.
- Sla het werkboek opnieuw op (het is nog steeds
.xlsm, dus een normaleCtrl+Sis voldoende).
- Selecteer de volledige
HighlightTopEarners-procedure (vanSubtotEnd Sub), kopieer deze en plak hem direct onder zichzelf inmodIntro. - Hernoem de tweede kopie van de
Sub-regel naarSub HighlightITDepartment()— elke procedure in een module moet een unieke naam hebben, anders weet VBA niet welke je bedoelt wanneer je deze probeert uit te voeren. - De voorwaarde die je moet wijzigen is de
If-regel. Op dit moment controleert deze een getal:
If ws.Cells(i, 6).Value > 55000 Then
Je moet nu tekst controleren — kolom 3 (Department) moet gelijk zijn aan "IT". Onthoud uit hoofdstuk 2 dat tekstvergelijkingen aanhalingstekens rond de waarde vereisen en gebruik = in plaats van >.
4. Alles binnen de lus (de Interior.Color-regel, de structuur van de lus zelf) kan hetzelfde blijven — alleen de te testen voorwaarde verandert.
Opmerkingen toevoegen
- Een opmerking begint met een apostrof (
') en staat op een eigen regel direct boven deSub-regel — niet binnen de procedure. - Schrijf deze alsof je de macro uitlegt aan een collega die deze nog nooit heeft gezien, niet als geheugensteuntje voor jezelf. Vergelijk:
- Minder nuttig:
' loops through rows(beschrijft hoe, wat de code al laat zien) - Meer nuttig:
' Highlights employees earning over $55,000(beschrijft wat het oplevert, wat niet direct duidelijk is)
- Minder nuttig:
- Doe hetzelfde voor de tweede procedure — één zin die beschrijft wat deze markeert en waarom, in termen van het zakelijke doel (IT-afdelingsmedewerkers), niet de technische werking van de lus.
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 3).Value = "IT" Then
ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — IT department is highlighted."
End Sub
Typ beide in modIntro, voer eerst HighlightTopEarners uit en controleer dat precies twee rijen groen worden (Emma Davis bij $62.000 en Sophia Miller bij $59.000 — de andere drie zitten op of onder $55.000), voer daarna HighlightITDepartment uit en controleer dat de rij van Sophia Miller wordt gemarkeerd. Sla op met Ctrl+S zodra beide werken.
Bedankt voor je feedback!