Изменение цвета фона всей строки таблицы на основе выбора раскрывающегося списка - условное форматирование

В моей таблице (Range("A3:K9999")) есть один столбец E (E3:E9999), который содержит выпадающие списки.

Моя цель - изменить цвет bg во всей строке таблицы, где пользователь выбирает элемент раскрывающегося списка в столбце E. На втором рабочем листе с именем «Ввод» находится таблица (A4: A7), которая содержит выбираемые элементы этих списков.

Это мой код до сих пор:

Sub Auto_Open() 'ConditionalFormatting
Dim rg As Range
Set rg = Worksheets(1).Range("A3:K9999")

'clear any existing conditional formatting
rg.FormatConditions.Delete

'define the formatting conditions
Dim cond1, cond2, cond3, cond4 As FormatCondition
Set cond1 = rg.FormatConditions.Add(xlExpression, Formula1: = "=$E3=Input!A4")
Set cond2 = rg.FormatConditions.Add(xlExpression, Formula1: = "=$E3=Input!A5")
Set cond3 = rg.FormatConditions.Add(xlExpression, Formula1: = "=$E3=Input!A6")
Set cond4 = rg.FormatConditions.Add(xlExpression, Formula1: = "=$E3=Input!A7")

'define the formatting applied for each condition
With cond1
    .Interior.Color = vbYellow
End With

With cond2
    .Interior.Color = vbRed
End With

With cond3
    .Interior.Color = vbGreen
End With

With cond4
    .Interior.Color = vbBlue
End With
End Sub

При этом я просто получаю сумасшедшие цвета в таблице, когда открываю файл excel... в основном желтый. Даже несмотря на то, что в полях со списками нет выбора. Как я могу заставить этот код работать правильно в каждом раскрывающемся списке всего столбца E (E3: E9999), правильно ли расположен этот Sub "Auto_Open()"? И есть ли эталонная ошибка в формуле условий?

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
0
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Условное форматирование VBA с проверкой данных

Sub AddConditionalFormatting()

    Const sName As String = "Input"
    Const sAddress As String = "A4:A7"
    
    Const dAddress As String = "A3:K9999"
    Const dColumn As Long = 5
    Dim dColors As Variant
    dColors = VBA.Array(vbYellow, vbRed, vbGreen, vbBlue)
    
    Dim sws As Worksheet: Set sws = ThisWorkbook.Worksheets("Input")
    Dim srg As Range: Set srg = sws.Range(sAddress)
    
    Dim dws As Worksheet: Set dws = ThisWorkbook.Worksheets(1) ' improve!
    Dim drg As Range: Set drg = dws.Range(dAddress)
    drg.FormatConditions.Delete
     
    Dim sCell As Range
    Dim r As Long
    
    For Each sCell In srg.Cells
        r = r + 1
        drg.FormatConditions.Add Type:=xlExpression, _
            Formula1: = " = " & drg.Cells(dColumn).Address(0) & "='" & sName _
            & "'!" & srg.Cells(r).Address
        drg.FormatConditions(drg.FormatConditions.Count) _
            .Interior.Color = dColors(r - 1)
    Next sCell

    MsgBox "Conditional formatting added.", vbInformation

End Sub

Какова цель VBA перед Array?

Vitalizzare 13.05.2022 07:24

@Vitalizzare: чтобы убедиться, что массив основан на нуле, несмотря ни на что (связанный с Option Base). Если Option Base 1 и нет ведущего VBA., то r - 1 приведет к неудаче.

VBasic2008 13.05.2022 07:35

Вау... Я только что вызвал ваш код в Sub Auto_Open(), и он отлично работает, как и ожидалось!! Спасибо, очень приятно!! Хорошего дня!!! :-)

cody 13.05.2022 18:52

Другие вопросы по теме