Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Je Eerste VBA-Procedure Schrijven | Introductie tot VBA en het Excel-objectmodel
Excel VBA voor Bedrijfsautomatisering

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 Explicit helemaal 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, niet x) — 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
Regel voor regel doorlopen
expand arrow
  • Dim ws As Worksheet / Dim i As Long — deze declareren twee variabelen: ws bevat een verwijzing naar het Employees sheet, en i telt 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 kolom A te 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

  1. Typ HighlightTopEarners precies zoals weergegeven in modIntro en voer het uit. Bevestig dat twee rijen groen worden.
  2. Dupliceer de procedure als HighlightITDepartment en 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.
  3. 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.
  4. Sla het werkboek opnieuw op (het is nog steeds .xlsm, dus een normale Ctrl+S is voldoende).
Hint
expand arrow
  1. Selecteer de volledige HighlightTopEarners-procedure (van Sub tot End Sub), kopieer deze en plak hem direct onder zichzelf in modIntro.
  2. Hernoem de tweede kopie van de Sub-regel naar Sub 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.
  3. 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

  1. Een opmerking begint met een apostrof (') en staat op een eigen regel direct boven de Sub-regel — niet binnen de procedure.
  2. 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)
  3. 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.
Oplossing
expand arrow
' 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.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 6

Vraag AI

expand

Vraag AI

ChatGPT

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 Explicit helemaal 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, niet x) — 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
Regel voor regel doorlopen
expand arrow
  • Dim ws As Worksheet / Dim i As Long — deze declareren twee variabelen: ws bevat een verwijzing naar het Employees sheet, en i telt 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 kolom A te 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

  1. Typ HighlightTopEarners precies zoals weergegeven in modIntro en voer het uit. Bevestig dat twee rijen groen worden.
  2. Dupliceer de procedure als HighlightITDepartment en 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.
  3. 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.
  4. Sla het werkboek opnieuw op (het is nog steeds .xlsm, dus een normale Ctrl+S is voldoende).
Hint
expand arrow
  1. Selecteer de volledige HighlightTopEarners-procedure (van Sub tot End Sub), kopieer deze en plak hem direct onder zichzelf in modIntro.
  2. Hernoem de tweede kopie van de Sub-regel naar Sub 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.
  3. 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

  1. Een opmerking begint met een apostrof (') en staat op een eigen regel direct boven de Sub-regel — niet binnen de procedure.
  2. 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)
  3. 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.
Oplossing
expand arrow
' 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.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 6
some-alt