Formatering
Beskrivelse
Formatering
Når vi nu har lært at gennemløbe et datasæt og markere celler må det være meget passende at formatere lidt på cellerne. Det gør man med Range objektet, der har en lang række underobjekter og egenskaber, der bruges til dette. Jeg har forsøgt at lave en lille tabel med de mest brugte:
| Opgave | VBA kode |
| Fed | Range("A1").Font.Bold = True |
| Kursiv | Range("A1").Font.Italic = True |
| Font Verdana | Range("A1").Font.Name = "Verdana" |
| Font størrelse 12 pt | Range("A1").Font.Size = 12 |
| Baggrundsfarve rød | Range("A1").Interior.Color = RGB(255, 0, 0) |
| Streg rundt om celle | Range("A1").BorderAround xlContinuous, xlThick, xlColorIndexAutomatic |
| Autotilpas kolonne | Range("A1").EntireColumn.AutoFit |
Skal du bruge en helt speciel formatering er det letteste at optage en lille makro, der laver den pågældende formatering og efterfølgende gå ind i makroen og se, hvilke objekter, der skal bruges.
Du kan naturligvis kombinere din viden om markering af område med formatering - hvis du for eksempel vil formatere den øverste række i et regneark kan det se sådan her ud:
Range("A1", Range("A1").End(xlToRight)).Font.Bold = True
Øvelse
Download dette regnark. Skriv makroer så knapperne virker efter hensigten. Du må selv vælge, hvordan formateringen skal laves - det skal bare være pænt
.
Husk igen, at dine makroer skal være uafhængige af hvor mange poster der er i regnearket.
Send regnearket til mig.
Når jeg skriver "marker" mener jeg "farv på en måde, så brugeren let kan finde".
Løsning
Se mit løsningsforslag her.
Min kode ser sådan her ud:
Sub Autotilpas() Range("A1", Range("A1").End(xlToRight)).EntireColumn.AutoFit End Sub Sub FormaterOverskrift() With Range("A1", Range("A1").End(xlToRight)) .Interior.ColorIndex = 3 .Font.Bold = True With .Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThick .ColorIndex = 0 End With End With End Sub Sub FormaterData() Dim c As Range For Each c In Range("A2", Range("A2").End(xlDown)) With Range(c, c.End(xlToRight)) If (c.Row Mod 2) = 0 Then .Interior.ColorIndex = 15 Else .Interior.ColorIndex = 16 End If End With Next End Sub Sub NulStilFormatering() Range("A1", Range("A1").End(xlToRight).End(xlDown)).ClearFormats End Sub Sub MarkerPCSalg() Dim c As Range For Each c In Range("A1", Range("A1").End(xlDown)) If c.Offset(0, 5).Value = "PC" Then With Range(c, c.End(xlToRight)) .Interior.ColorIndex = 3 End With End If Next End Sub Sub MarkerSalgOver10000() Dim c As Range For Each c In Range("A2", Range("A2").End(xlDown)) If c.Offset(0, 7).Value * c.Offset(0, 8).Value > 10000 Then With Range(c, c.End(xlToRight)) .Interior.ColorIndex = 3 End With End If Next End Sub Bemærk at dataformateringen indeholder et eksempel på, hvordan man kan lave linjer med skiftende farver - mod fuktionen giver rest ved division og ved at finde resten ved division med 2 finder jeg ud af om rækkenummeret er lige (rest = 0) eller ulige (rest = 1).
Avanceret betinget formatering
Du kender sikkert allerede muligheden for at lave betinget formatering via menuen Formater | Betinget formatering..., men den har forskellige svagheder, der gør det interessant at etablere sin egen version. Det kan man gøre via arkfanens hændelsesprocedurer - i VBA editoren dobbeltklikker du på den arkfane der indeholder dine data, vælg Worksheet i venstre dropdown og Change i højre:

Det giver en hændelsesprocedure, der bliver kaldt, hver gang der sker ændringer i arket. Med denne lille snut kode kan man så lave betinget formatering:
Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo slut If Not Intersect(Target, Range("A1:J100")) Is Nothing Then ' Virker kun i omkrådet A1:J100 If Target.Cells.Count = 1 Then ' Kører kun ved ændringer på enkeltceller ' Her skal du så skrive den kode der tjekker om der skal formateres og i givet fald gøre det End If End If slut: End Sub Det kan i nogle situationer være nødvendigt at supplere ovenstående med en tilsvarende kode i Workbook_Open, der løber hele arket igennem og sørger for korrekt formatering.
Brug for hjælp til VBA, VSTO eller SQL?
Scient Data tilbyder professionel IT-konsulentbistand
Kontakt Scient Data →