Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Opmaken met VBA | Werken met Excel-gegevens
Excel VBA voor Bedrijfsautomatisering

Opmaken met VBA

Veeg om het menu te tonen

Alles wat je handmatig kunt opmaken in Excel, kun je ook via code opmaken.

Lettertypen

With is een afkorting om meerdere keren achter elkaar naar hetzelfde object te verwijzen zonder telkens de volledige naam te typen. With obj ... End With betekent simpelweg dat elke regel binnen dat blok die met een punt begint (zoals .Property = X) een afkorting is voor obj.Property = X — VBA vult automatisch obj in voor elke regel. Dit is puur voor de leesbaarheid; het verandert niets aan de werking van de code.

' Without With — obj repeated on every line
ws.Range("A1:I1").Font.Bold = True
ws.Range("A1:I1").Font.Size = 11
ws.Range("A1:I1").Font.Color = RGB(255, 255, 255)

' With With — the object is stated once, everything else is shorthand
With ws.Range("A1:I1").Font
    .Bold = True
    .Size = 11
    .Color = RGB(255, 255, 255)
    .Name = "Calibri"
End With

Beide versies doen exact hetzelfde — With voorkomt alleen dat je ws.Range("A1:I1").Font drie keer hoeft te herhalen.

Kleuren

ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60)   ' dark green header

Randen

With ws.Range("A1:I6").Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    .Color = RGB(200, 200, 200)
End With

Uitlijning

ws.Range("E2:E6").HorizontalAlignment = xlCenter
ws.Range("C2:C6").HorizontalAlignment = xlLeft

Basisprincipes van voorwaardelijke opmaak

VBA kan dezelfde regels toepassen als via het lint:

Dim rng As Range
Set rng = ws.Range("I2:I6")     ' Status column
 
rng.FormatConditions.Delete     ' clear any existing rules first
rng.FormatConditions.Add Type:=xlTextString, String:="Cancelled", _
    TextOperator:=xlContains
rng.FormatConditions(1).Interior.Color = RGB(255, 199, 206)
rng.FormatConditions(1).Font.Color = RGB(156, 0, 6)
Figuur 3.4

Voer dit uit en elke "Cancelled" order krijgt automatisch een rood getinte markering — en in tegenstelling tot handmatig opgemaakte opmaak blijft de regel actief als de waarde van Status later verandert.

Opdracht

  1. Maak de koprij (A1:I1) vet, geef deze een donkergroene opvulling (RGB(24, 106, 60)) en maak het lettertype wit (RGB(255, 255, 255)) — allemaal via code, niet handmatig.
  2. Voeg dunne grijze (RGB(200, 200, 200)) randen toe rondom de volledige tabel met behulp van CurrentRegion.
  3. Voeg een voorwaardelijke opmaak toe die elke order met Discount % >= 10 geel markeert (RGB(255, 235, 156)).
Hint
expand arrow

1. Opmaak van de koprij

  • Font.Bold, Interior.Color en Font.Color kunnen allemaal op hetzelfde bereik worden ingesteld.
  • Donkergroene opvulling vereist een RGB-trio; wit lettertype is de eenvoudigste RGB-waarde die er is.
  • Een With...End With-blok voorkomt dat je ws.Range("A1:I1") drie keer moet herhalen.

2. Randen toevoegen met CurrentRegion

  • CurrentRegion op A1 pakt de hele tabel zonder dat je hoeft te weten of hardcoden hoeveel rijen er zijn.
  • Randen hebben drie eigenschappen die samen moeten worden ingesteld: LineStyle, Weight en Color — dun grijs betekent xlThin en een lichte grijze RGB-waarde.

3. Voorwaardelijke opmaak voor Discount % >= 10

  • Dit is een numerieke vergelijking, geen tekstuele, dus het voorwaardentype is xlCellValue met xlGreaterEqual — anders dan het “Cancelled”-tekstvoorbeeld eerder in het hoofdstuk.
  • Het lastige: Discount % wordt opgeslagen als een decimaal getal (10% = 0.1), dus de vergelijkingswaarde in Formula1 moet als "0.1" worden geschreven, niet als "10".
  • Verwijder altijd eerst bestaande voorwaardelijke opmaak op dat bereik, anders stapelen herhaalde uitvoeringen van je macro dubbele regels op elkaar.
Oplossing
expand arrow
Sub FormatOrdersTable()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Header row formatting ---
    With ws.Range("A1:I1")
        .Font.Bold = True
        .Interior.Color = RGB(24, 106, 60)
        .Font.Color = RGB(255, 255, 255)
    End With

    ' --- 2. Borders around the full table ---
    With ws.Range("A1").CurrentRegion.Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .Color = RGB(200, 200, 200)
    End With

    ' --- 3. Conditional format for Discount % >= 10 ---
    Dim discountRange As Range
    Set discountRange = ws.Range("G2:G6")

    discountRange.FormatConditions.Delete
    discountRange.FormatConditions.Add Type:=xlCellValue, _
        Operator:=xlGreaterEqual, Formula1:="0.1"
    discountRange.FormatConditions(1).Interior.Color = RGB(255, 235, 156)
End Sub
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 4

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 3. Hoofdstuk 4
some-alt