/ / Formatowanie warunkowe przy użyciu VBA, Dynamiczne stylizowanie zakresu przez odwoływanie się do innej komórki w celu formatowania - excel, vba, dynamic, formatting, conditional

Formatowanie warunkowe przy użyciu VBA, Dynamiczne stylizowanie zakresu przez odwoływanie się do innej komórki w celu formatowania - excel, vba, dynamic, formatting, conditional

Oto mój problem.

wprowadź opis obrazu tutaj

Zastosowano więc do tego zakresu K3:K10, Mam kilka różnych formatów warunkowychreguły, które wymagają określonego ciągu tekstowego składającego się z zawartości przywoływanej komórki plus stałego ciągu tekstowego. Każda reguła stosuje inny kolor dla konkretnej komórki referencyjnej i ciągłego łańcucha tekstowego (DEAD lub ALIVE). Na przykład w zakresie, jeśli komórka zawiera słowo "Pies", a następnie spację, a następnie słowo "Zmarły", zostanie sformatowany na czerwono. Legenda w kolumnach D i E pokaż, jakie kolory odnoszą się do każdego zwierzęcia w przypadku kombinacji kryteriów (Animal and Dead / Alive). Chcę tylko wybrać kolor zwierzęcia z rozwijaną listą w kolumnie Ci niech CF zmieni formatowanie dowolnych komórek z tego zakresu K3:K10 aby dopasować formatowanie / styl odpowiedniego wiersza w kolumnie C kiedy konkretna reguła jest prawdziwa.

Więc jeśli K3 to "Dog Dead", a następnie zastosuj to samo formatowanie, co w komórce D3 lub jeśli jest to "Dog Alive", zastosuj to samo formatowanie, co E3. Nie chcę po prostu prosić CF, aby komórka zawierająca "Dog Dead" była czerwona, a "Dog Alive" była jasnoczerwona, ponieważ kolor psa nie może być czerwony, może być zielony lub niebieski.

Tak myślę, że chcę osiągnąć dynamiczne formatowanie warunkowe przy użyciu VBA, które myślę. Czy ktoś może mi pomóc zacząć?

Dzięki,

Andy.

Odpowiedzi:

0 dla odpowiedzi № 1

Punkt początkowy !!
W zdarzeniu Arkusz:

Private Sub Worksheet_Change(ByVal Target As Range)
ApplyCond Range("K" & Target.Row)
End Sub

Oraz w module:

Public Sub ApplyCond(xx As Range)
If xx.Value = "" Then Exit Sub
xx.FormatConditions.Delete
xx.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:=xx.Value
kk = Split(xx.Value)
a = -1
b = -1
For i = LBound(kk) To UBound(kk)
Select Case kk(i)
Case "Dead": a = 4
Case "Alive": a = 5
Case Else
For e = 3 To 9999
If Range("B" & e).Value = "" Then Exit For
If Range("B" & e).Value = kk(i) Then
b = e
End If
Next
End Select
Next

" Apply Format
On Error Resume Next
If (a > 0) And (b > 0) Then
With xx.FormatConditions(1).Interior
.PatternColorIndex = Cells(b, a).Interior.PatternColorIndex
.Color = Cells(b, a).Interior.Color
.TintAndShade = Cells(b, a).Interior.TintAndShade
.Pattern = Cells(b, a).Interior.Pattern
.PatternThemeColor = Cells(b, a).Interior.PatternThemeColor
.ThemeColor = Cells(b, a).Interior.ThemeColor
.PatternTintAndShade = Cells(b, a).Interior.PatternTintAndShade
End With
With xx.FormatConditions(1).Font
.Bold = Cells(b, a).Font.Bold
.Italic = Cells(b, a).Font.Italic
.Underline = Cells(b, a).Font.Underline
.Strikethrough = Cells(b, a).Font.Strikethrough
.ThemeColor = Cells(b, a).Font.ThemeColor
.TintAndShade = Cells(b, a).Font.TintAndShade
.Color = Cells(b, a).Font.Color
.TintAndShade = Cells(b, a).Font.TintAndShade
End With
End If
End Sub

Musisz zweryfikować formułę Split. Być może lepiej jest użyć funkcji LCase lub innego filtra.
W mojej funkcji nie używam kolumny "C".