VBA och Excels färgpalett
Excels färgpalett innehåller 56 fördefinierade färger (varav 16 färger är till för diagram) vilka du kan modifiera antingen via menyn Tools – Options – Color eller via makro och VBA-kod.
I ett antal exempel så kommer jag att visa hur du modifierar färgpaletten med hjälp av VBA.
Kort om Excel och färgdesign
Flertalet av de fördefinierade färgerna i Excel är ganska starka och kan göra arbetsbladen svåra att ta till sig, varför det kan vara praktiskt att lära sig hur man snabbt och enkelt modifierar paletten.
Färgval och färgtycke är självklart en smakfråga, vilket rent generellt betyder att det inte finns något rätt eller fel vad gäller färg. Just därför bör man försöka undvika alltför starka färger – allt för att Excelbokens design skall passa så många som möjligt och för att innehållet i dina uppställningar skall få så stort genomslag som möjligt. Det kan också vara en god idé att försöka hålla en liknande färgdesign genom arbetsblad och Excelböcker.
Excels initiala färgpalett
De 40 + 16 färgerna i paletten används till att färga innehåll som t ex text, bakgrunder, kantlinjer och diagram. Varje färgruta har ett eget nummer mellan 1 och 56. Tyvärr så följer numreringen inget logiskt mönster utan “hoppar” i kvadraten. Följande VBA-kod skriver ut de 56 färgerna i celler A1 till A56.
Sub Skriva_Ut_Fargpalett() Dim i For i= 1 To 56 Cells(i, 1).Interior.ColorIndex = i Next i End Sub |
Excel och RGB-färger
Excel uttrycker färger i formatet RGB (Red, Green, Blue).
Det här systemet uttrycker en färg via en blandning av dessa tre färger. Vardera färg ges ett värde mellan 0 och 255, och med hjälp av denna blandning kan drygt 16 miljoner färger uttryckas (256 x 256 x 256).
Svart uttrycks som (0,0,0) medan vitt ges (255,255,255).
Modifiera Excels färgpalett via VBA
Följande kod justerar färgerna 40 och 41 på paletten, och tilldelar dem vissa färgkombinationer i RGB-format.
ActiveWorkbook.Colors(40) = RGB(234, 234, 234) ActiveWorkbook.Colors(41) = RGB(236, 235, 194) |
VBA-kod för att ändra cellers bakgrundsfärg
För att ändra bakgrundsfärg i en markerad cell så använder vi följande kod för att tilldela cellen färg nummer 40 från paletten.
Selection.Interior.ColorIndex = 40 |
Det går också bra att skriva in färgens RGB-värde direkt:
Selection.Interior.Color = RGB(0, 102, 153) |
Samma operation kan även uttryckas i hexadecimal form där färgkoden inleds med “&HC” följt av färgnyansens sexsiffriga hexadecimaltal.
Selection.Interior.Color = &HC006699 |
Vidare så finns det några specialparametrar för att uttrycka färger:
Selection.Interior.ColorIndex = xlNone 'ingen färg Selection.Interior.ColorIndex =xlColorIndexAutomatic 'standardfärg Selection.Interior.ColorIndex =xlColorIndexNone 'ingen färg |
Återställa till Excels grundpalett
Den här VBA-koden återställer färgerna så att färgpaletten återspeglar Excels grundinställning.
ActiveWorkbook.ResetColors |
Kopiera färgpaletten till en annan Excelbok
Det går bra att kopiera (importera) färgpaletten från en annan Excelbok genom att modifiera egenskapen Colors hos aktuell Excelbok.
ActiveWorkbook.Colors = Workbooks("C:\MinFinFinaGrundPalett.xls").Colors |
Ta reda på en cells bakgrundsfärg
Följande VBA-kod återger vilken bakgrundsfärg som cell C1 har.
i = Cells(1, 3).Interior.ColorIndex : MsgBox i |
Applicera färg enligt villkor
Nedan ges ett exempel på hur du i VBA kan färga celler enligt uppställda villkor.
For Each Item In Intersect(ActiveSheet.UsedRange, Selection.Cells) If Item.Text = "Frånvaro" Then Item.Interior.ColorIndex = 3 End If Next |