IT Fjernundervisning

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:

Excel VBA kurusus - betinget formatering

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 →