Formatering med VBA
Sveip for å vise menyen
Alt du kan formatere manuelt i Excel, kan du også formatere med kode.
Skrifttyper
With er en snarvei for å referere til det samme objektet flere ganger på rad uten å måtte skrive hele navnet på hver linje. With obj ... End With betyr at hver linje inne i blokken som starter med et punktum (som .Property = X) er en forkortelse for obj.Property = X — VBA fyller automatisk inn obj for hver linje. Dette er kun for å gjøre koden mer lesbar; det endrer ikke hva koden gjø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 versjonene gjør nøyaktig det samme — With unngår bare å gjenta ws.Range("A1:I1").Font tre ganger.
Farger
ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60) ' dark green header
Rammer
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
Grunnleggende om betinget formatering
VBA kan bruke de samme reglene som du ville laget 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)
Kjør dette, og hver "Cancelled"-ordre får automatisk et rødt høydepunkt — og i motsetning til manuell formatering forblir regelen aktiv hvis Status-verdien senere endres.
Oppgave
- Gjør overskriftsraden (
A1:I1) fet, gi den en mørkegrønn fyllfarge (RGB(24, 106, 60)), og gjør skriftfargen hvit (RGB(255, 255, 255)) — alt i kode, ikke manuelt. - Legg til tynne grå (
RGB(200, 200, 200)) kanter rundt hele tabellen ved å brukeCurrentRegion. - Legg til en betinget formatering som markerer alle ordre med
Discount % >= 10i gult (RGB(255, 235, 156)).
1. Formatering av overskriftsraden
Font.Bold,Interior.ColorogFont.Colorkan alle settes på samme område.- Mørkegrønn fyll krever en RGB-trippel; hvit skrift er den enkleste RGB-verdien som finnes.
- En
With...End With-blokk unngår å måtte gjentaws.Range("A1:I1")tre ganger.
2. Legge til kanter med CurrentRegion
CurrentRegionpå A1 fanger hele tabellen uten at du trenger å vite eller hardkode hvor mange rader som finnes.- Kanter har tre egenskaper som må settes sammen:
LineStyle,WeightogColor— tynn grå betyrxlThinog en lys grå RGB-verdi.
3. Betinget formatering for Discount % >= 10
- Dette er en numerisk sammenligning, ikke en tekstsammenligning, så betingelsestypen er xlCellValue med xlGreaterEqual — forskjellig fra "Cancelled"-eksempelet tidligere i kapitlet.
- Det vanskelige: Discount % lagres som desimal (10% = 0,1), så sammenligningsverdien i Formula1 må skrives som "0.1", ikke "10".
- Husk alltid å fjerne eksisterende betingede formateringer på det området først, ellers vil gjentatte kjøringer av makroen legge til dupliserte regler oppå hverandre.
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
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Formatering med VBA
Alt du kan formatere manuelt i Excel, kan du også formatere med kode.
Skrifttyper
With er en snarvei for å referere til det samme objektet flere ganger på rad uten å måtte skrive hele navnet på hver linje. With obj ... End With betyr at hver linje inne i blokken som starter med et punktum (som .Property = X) er en forkortelse for obj.Property = X — VBA fyller automatisk inn obj for hver linje. Dette er kun for å gjøre koden mer lesbar; det endrer ikke hva koden gjø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 versjonene gjør nøyaktig det samme — With unngår bare å gjenta ws.Range("A1:I1").Font tre ganger.
Farger
ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60) ' dark green header
Rammer
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
Grunnleggende om betinget formatering
VBA kan bruke de samme reglene som du ville laget 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)
Kjør dette, og hver "Cancelled"-ordre får automatisk et rødt høydepunkt — og i motsetning til manuell formatering forblir regelen aktiv hvis Status-verdien senere endres.
Oppgave
- Gjør overskriftsraden (
A1:I1) fet, gi den en mørkegrønn fyllfarge (RGB(24, 106, 60)), og gjør skriftfargen hvit (RGB(255, 255, 255)) — alt i kode, ikke manuelt. - Legg til tynne grå (
RGB(200, 200, 200)) kanter rundt hele tabellen ved å brukeCurrentRegion. - Legg til en betinget formatering som markerer alle ordre med
Discount % >= 10i gult (RGB(255, 235, 156)).
1. Formatering av overskriftsraden
Font.Bold,Interior.ColorogFont.Colorkan alle settes på samme område.- Mørkegrønn fyll krever en RGB-trippel; hvit skrift er den enkleste RGB-verdien som finnes.
- En
With...End With-blokk unngår å måtte gjentaws.Range("A1:I1")tre ganger.
2. Legge til kanter med CurrentRegion
CurrentRegionpå A1 fanger hele tabellen uten at du trenger å vite eller hardkode hvor mange rader som finnes.- Kanter har tre egenskaper som må settes sammen:
LineStyle,WeightogColor— tynn grå betyrxlThinog en lys grå RGB-verdi.
3. Betinget formatering for Discount % >= 10
- Dette er en numerisk sammenligning, ikke en tekstsammenligning, så betingelsestypen er xlCellValue med xlGreaterEqual — forskjellig fra "Cancelled"-eksempelet tidligere i kapitlet.
- Det vanskelige: Discount % lagres som desimal (10% = 0,1), så sammenligningsverdien i Formula1 må skrives som "0.1", ikke "10".
- Husk alltid å fjerne eksisterende betingede formateringer på det området først, ellers vil gjentatte kjøringer av makroen legge til dupliserte regler oppå hverandre.
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
Takk for tilbakemeldingene dine!