05. januar 2007 - 12:38Der er
4 kommentarer og 1 løsning
Betinget formattering skal ændres til interiorfarve af anden cell
Hejsa, Jeg har lavet en række betingede formler, hvor jeg med farver ønsker at illustrere hvilke celler der skal udfyldes / hhv. ikke skal udfyldes.
Hvordan gør jeg denne "udfyld-ikke" farve til interiorfarver fra en bestemt celle ved hjælp af efterfølgende gennemløb?
Kan jeg fx med VBA løbe alle mine Betingede formateringer igennem og udskifte farven?
Forudsætning: Alle betingede formatteringer i regnearket indeholder lige nu samme opbygning: Hvis en bestemt celle i samme række har en given værdi, skal denne celle enten være farvet eller ikke-farvet.
Eksempel: På arket "Register" i kolonnen "L" følgende bet.formattering i L10
=$C10=CurrentTypeIssue Betinget formattering: Cell interior = (Farvevalg fra Excel farvepaletten)
Dette virker fint, og i ovenstående eksempel skifter J10 farve til "brun", hvis C10 = værdien i den navngivne celle CurrenttypeIssue
På enkelte celler er der flere betingelser, fx for cellen "J11": Hvis B11 = "værdi1" --> interiorfarve = farve Hvis B11 = "værdi2" --> interiorfarve = farve (samme farve)
Kan jeg på en elegang måde traversere alle conditional formattings igennem?
Når jeg aktiverer makro skriver den fx følgende kode ved oprettelse af en betinget formattering
En meget tung workaround vil være at lave en makro der påny skriver samtlige betingede formatteringer ind, men da vi snakker 1000+ betingede formatteringer vil det være tungt at indskrive alle betingelserne påny samt tungt at trigge delete og opret hver gang én person ønsker at vise ikke-aktive felter med en anden farve, der modsvarer det øvrige farvevalg i løsningen.
Tak for kommentaren gibber - men det er ikke hvad jeg efterspørger.
Jeg skal dynamisk kunne tilpasse farven af de mange betingede formatteringer overalt i arket, ved at en bruger ændrer farven på én celle på et setup-ark.
Det er et stort ark, hvor man kan sprog- og farvestyre indholdet i alle overskrifter, indtastningsområder mv.
Farvestyringen er håndteret ved at brugeren pt. kan definere 4 forskellige farver: Overskrift-baggrundsfarve, Overskrift-tekstfarve, Indtastområde-baggrundsfarve, indtastområde-tekstfarve.
Dette er løst ved at navngive alle ranges der skal kunne skifte farve og skrive disse navne ind i et config ark, med angivelse af om det er en heading eller indtastningsrange.
i = 1
While Len(Range("HeadingConfigColorChanges").Offset(i, 0).Value) > 1 Debug.Print Range("HeadingConfigColorChanges").Offset(i, 0).Value If Range("HeadingConfigColorChanges").Offset(i, 0).Value = "Heading" Then Range(Range("HeadingConfigColorChanges").Offset(i, 1).Value).Interior.ColorIndex = Range("ColorHeadingBackground").Interior.ColorIndex Range(Range("HeadingConfigColorChanges").Offset(i, 1).Value).Font.ColorIndex = Range("ColorHeadingFont").Interior.ColorIndex End If
If Range("HeadingConfigColorChanges").Offset(i, 0).Value = "Cells" Then Range(Range("HeadingConfigColorChanges").Offset(i, 1).Value).Interior.ColorIndex = Range("ColorCellsBackground").Interior.ColorIndex Range(Range("HeadingConfigColorChanges").Offset(i, 1).Value).Font.ColorIndex = Range("ColorCellsFont").Interior.ColorIndex End If
i = i + 1 Wend
Alle mine betingede formatteringer er celler i indtastningsområdet der er inaktive (ikke skal udfyldes) - dette skal gerne matche de øvrige farvevalg når jeg kører min makro, således at felter der ikke skal anvendes har forskellig farve, afhængigt af de farver man vælger i øvrigt. Optimalt set definerer jeg en celle med navn ColorInactiveCellsBackground, hvorved jeg med range("ColorInactiveCellsBackground").interior kan farve alle mine betingede formatteringer i en makro.
Den undersøger hver celle i et område for betingede formateringer. Der bør angives begrænsede områder i ark (ubenytttede områder kan alternativt skjules) da makroen vil være meget langtid om at checke alle celler i arket.
Sub Opdaterbaggrundsfarve()
Dim rCells As Range
Sheets("ark1").Range("A1:L50").Select ' Definer område hvor markoen skal undersøge/ændre For Each rCells In Selection For a = 1 To 3 ' tester for op til 3 betingelser i formateringen If rCells.FormatConditions.Count = a Then rCells.FormatConditions(a).Interior.ColorIndex = Range("ColorInactiveCellsBackground").Interior.ColorIndex End If Next a Next rCells End Sub
Med udgangspunkt i din glimrende kode har jeg tilrettet en smule.
Du tester for antal betingede formatteringer men ændrer kun den øverste, jeg sætter blot lige endnu et inner loop op, så kører det hele - mange tak!
Smid et svar, gibber, så får du dine velfortjente point!
If Range("HeadingConfigColorChanges").Offset(i, 0).Value = "Conditional Format" Then Debug.Print Range(Range("HeadingConfigColorChanges").Offset(i, 1).Value).Address For Each cell In Range(Range("HeadingConfigColorChanges").Offset(i, 1).Value) For a = 1 To 3 ' tester for op til 3 betingelser i formateringen If cell.FormatConditions.Count = a Then For y = 1 To a cell.FormatConditions(y).Interior.ColorIndex = Range("ColorCellsFrameAndConditionalFormat").Interior.ColorIndex Next y End If Next a Next cell End If
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.