Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Formatering med VBA | Arbejde med Excel-data
Excel VBA til Forretningsautomatisering

Formatering med VBA

Stryg for at vise menuen

Alt, hvad du kan formatere manuelt i Excel, kan du også formatere via kode.

Skrifttyper

With er en genvej til at referere til det samme objekt flere gange i træk uden at skulle skrive dets fulde navn på hver linje. With obj ... End With betyder blot, at hver linje inden for blokken, der starter med et punktum (som .Property = X), er en forkortelse for obj.Property = X — VBA indsætter automatisk obj for hver linje. Det er udelukkende for at gøre koden mere læsbar; det ændrer ikke, hvad koden gør.

' 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

Begge versioner gør præcis det samme — With undgår blot gentagelse af ws.Range("A1:I1").Font tre gange.

Farver

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

Kanter

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

Justering

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

Grundlæggende betinget formatering

VBA kan anvende de samme regler, som du ville oprette via båndet:

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)
Figur 3.4

Kør dette, og hver "Cancelled" ordre får automatisk en rødtonet fremhævning — og i modsætning til manuel formatering forbliver reglen aktiv, hvis Status-værdien senere ændres.

Opgave

  1. Gør overskriftsrækken (A1:I1) fed, giv den en mørkegrøn fyldfarve (RGB(24, 106, 60)), og gør skrifttypen hvid (RGB(255, 255, 255)) — alt sammen i kode, ikke manuelt.
  2. Tilføj tynde grå (RGB(200, 200, 200)) kanter omkring hele tabellen ved hjælp af CurrentRegion.
  3. Tilføj en betinget formatering, der fremhæver enhver ordre med Discount % >= 10 i gul (RGB(255, 235, 156)).
Tip
expand arrow

1. Formatering af overskriftsrækken

  • Font.Bold, Interior.Color og Font.Color kan alle indstilles på det samme område.
  • Mørkegrøn fyldfarve kræver et RGB-triplet; hvid skrift er den simpleste RGB-værdi.
  • En With...End With-blok undgår gentagelse af ws.Range("A1:I1") tre gange.

2. Tilføjelse af kanter med CurrentRegion

  • CurrentRegion på A1 fanger hele tabellen uden at du behøver at vide eller hårdkode, hvor mange rækker der findes.
  • Kanter har tre egenskaber, der skal indstilles sammen: LineStyle, Weight og Color — tynd grå betyder xlThin og en lys grå RGB-værdi.

3. Betinget formatering for Discount % >= 10

  • Dette er en numerisk sammenligning, ikke en tekstbaseret, så betingelsestypen er xlCellValue med xlGreaterEqual — forskelligt fra eksemplet med “Cancelled” tekst tidligere i kapitlet.
  • Det vanskelige: Discount % gemmes som et decimaltal (10% = 0,1), så sammenligningsværdien i Formula1 skal skrives som "0.1", ikke "10".
  • Ryd altid eksisterende betingede formater på det område først, ellers vil gentagne kørsel af din makro stable dublerede regler oven på hinanden.
Løsning
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
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 4

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Formatering med VBA

Alt, hvad du kan formatere manuelt i Excel, kan du også formatere via kode.

Skrifttyper

With er en genvej til at referere til det samme objekt flere gange i træk uden at skulle skrive dets fulde navn på hver linje. With obj ... End With betyder blot, at hver linje inden for blokken, der starter med et punktum (som .Property = X), er en forkortelse for obj.Property = X — VBA indsætter automatisk obj for hver linje. Det er udelukkende for at gøre koden mere læsbar; det ændrer ikke, hvad koden gør.

' 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

Begge versioner gør præcis det samme — With undgår blot gentagelse af ws.Range("A1:I1").Font tre gange.

Farver

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

Kanter

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

Justering

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

Grundlæggende betinget formatering

VBA kan anvende de samme regler, som du ville oprette via båndet:

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)
Figur 3.4

Kør dette, og hver "Cancelled" ordre får automatisk en rødtonet fremhævning — og i modsætning til manuel formatering forbliver reglen aktiv, hvis Status-værdien senere ændres.

Opgave

  1. Gør overskriftsrækken (A1:I1) fed, giv den en mørkegrøn fyldfarve (RGB(24, 106, 60)), og gør skrifttypen hvid (RGB(255, 255, 255)) — alt sammen i kode, ikke manuelt.
  2. Tilføj tynde grå (RGB(200, 200, 200)) kanter omkring hele tabellen ved hjælp af CurrentRegion.
  3. Tilføj en betinget formatering, der fremhæver enhver ordre med Discount % >= 10 i gul (RGB(255, 235, 156)).
Tip
expand arrow

1. Formatering af overskriftsrækken

  • Font.Bold, Interior.Color og Font.Color kan alle indstilles på det samme område.
  • Mørkegrøn fyldfarve kræver et RGB-triplet; hvid skrift er den simpleste RGB-værdi.
  • En With...End With-blok undgår gentagelse af ws.Range("A1:I1") tre gange.

2. Tilføjelse af kanter med CurrentRegion

  • CurrentRegion på A1 fanger hele tabellen uden at du behøver at vide eller hårdkode, hvor mange rækker der findes.
  • Kanter har tre egenskaber, der skal indstilles sammen: LineStyle, Weight og Color — tynd grå betyder xlThin og en lys grå RGB-værdi.

3. Betinget formatering for Discount % >= 10

  • Dette er en numerisk sammenligning, ikke en tekstbaseret, så betingelsestypen er xlCellValue med xlGreaterEqual — forskelligt fra eksemplet med “Cancelled” tekst tidligere i kapitlet.
  • Det vanskelige: Discount % gemmes som et decimaltal (10% = 0,1), så sammenligningsværdien i Formula1 skal skrives som "0.1", ikke "10".
  • Ryd altid eksisterende betingede formater på det område først, ellers vil gentagne kørsel af din makro stable dublerede regler oven på hinanden.
Løsning
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
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 4
some-alt