Я пытаюсь создать макрос Excel, который применяет условное форматирование к целевому столбцу, используя условие ячеек в другом столбце и формат ячеек в еще одном столбце (по сути, цветовой ключ).
Цветовой ключ представляет собой одну столбчатую диаграмму с цветными ячейками, содержащими текст в каждой строке (например, синяя ячейка с «синим» в качестве текста).
Цель состоит в том, чтобы иметь возможность изменять цвета заливки или текст в цветовом ключе, а целевые ячейки автоматически изменяются на новые цвета или условия без необходимости жесткого кодирования нового RGB с помощью диспетчера правил условного форматирования Excel.
Это сэкономит много времени, так как цветов много, и они должны точно соответствовать RGB.
Вот что у меня есть на данный момент:
Sub ColorCode()
'Applies conditional formatting to Input Chart using the Color Key
Application.ScreenUpdating = False
Dim ColorKey As Range
Set ColorKey = Worksheets(2).Range("C6:C19")
Dim kCell As Object
Dim lCell As Object
Dim mCell As Object
With Worksheets(2)
For Each mCell In Worksheets(2).Range("Input[Duration1]")
If mCell.Value <> "0" Then
For Each lCell In Worksheets(2).Range("Input[Color1]")
If lCell.Value <> "" Then
For Each kCell In ColorKey.Cells
If lCell.Value = kCell.Value Then
mCell.Interior.Color = kCell.Interior.Color
mCell.Font.Color = kCell.Font.Color
End If
Next
End If
Next
End If
Next
End With
Это проходит через каждую из ячеек в столбцах и фактически окрашивает их. Проблема в том, что все ячейки окрашены в соответствии с состоянием последней ячейки, поэтому все цвета одинаковы, а не каждая ячейка отформатирована для своего собственного состояние.
Перед добавлением "application.screenupdating=false"
я вижу, как цвета мерцают, пока он зацикливается, но они просто не прилипают. Когда я пытаюсь добавить "ByVal Target as Range"
в свой код, мой макрос исчезает, и, честно говоря, даже несмотря на то, что я просмотрел это, я действительно не понимаю, что это означает.
Я новичок в VBA и почти уверен, что мне не хватает чего-то простого. Буду очень признателен за любую помощь с этим!
Я отмечаю ответ как ответ - вот обновленный код!
Sub getcol()
Dim rr As Range
Dim tg As Range
Set color_dict = CreateObject("Scripting.Dictionary"
For Each rr In Range("colorkey")
color_dict.Add rr.Text, rr.Interior.Color
Next
For Each rr In Range("input[color1]")
rr.Offset(0, -2).Interior.Color = color_dict(rr.Text)
Next
End Sub