Как выделить активный ряд только с VBA - PullRequest
0 голосов
/ 06 марта 2020

У меня есть код, который добавляет два правила условного форматирования к листу 4 (столбец A2: A и последняя строка), и теперь я пытаюсь выделить активную строку до последнего столбца (например, столбец B: E активный ряд). В настоящее время у меня есть этот код:

Private Sub Worksheet_Change(ByVal Target As Range)

 If Target.Address = "$A$2" Then

    Dim lr As Long

    lr = Range("A" & Sheet4.rows.Count).End(xlUp).Row

        With Range("A2:A" & lr)

            .FormatConditions.Delete

            .FormatConditions.Add Type:=xlExpression, Operator:=xlExpression, Formula1:="=COUNTIF('Test 2'!$A:$A,A2)>0"

            .FormatConditions(1).Interior.Color = RGB(198, 239, 206)

            .FormatConditions.Add Type:=xlExpression, Operator:=xlExpression, Formula1:="=COUNTIF('Test 2'!$A:$A,A2)=0"

            .FormatConditions(2).Interior.Color = RGB(255, 199, 206)

        End With 

    End If

End Sub

У меня есть два возможных решения

(1) Добавить условное форматирование к активному Строка ПОСЛЕ столбца A (Так, например, B: E активной строки. Я использую этот код после End If в приведенном выше коде.

If Application.CutCopyMode = False Then
Application.Calculate
End If

With Target

.FormatConditions.Add Type:=xlExpression, Operator:=xlExpression, Formula1:="=CELL("row")=ROW()"
.FormatConditions(1).Interior.Color = RGB(220, 239, 206)

End With

Кажется, я получаю ошибку с формулой для условного формата: .FormatConditions.Add Type:=xlExpression, Operator:=xlExpression, Formula1:="=CELL("row")=ROW()"

(2) Я добавил строку для определения имени столбца A в активной строке для «MyRange» для другой цели, поэтому я также попытался добавить это код вместо форматирования условия:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    ActiveWorkbook.Names.Add Name:="MyRange", RefersToR1C1:=Range("A" & (ActiveCell.Row))
    Range("A" & (ActiveCell.Row)).Select                                                   'Always Selects Column A depending on the Active Row selected
    Range("B:E" & (ActiveCell.Row)).Interior.Color = RGB(243, 243, 123)

End Sub

Там ошибка для второго решения с Range("B:E" & (ActiveCell.Row)).Interior.Color = RGB(243, 243, 123)

Вывод кода должен выглядеть следующим образом enter image description here

enter image description here

enter image description here

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Вот общий подход к этому типу задачи:

  1. Создайте имя книги "THE_ROW" и присвойте ей начальное значение 0

  2. Добавьте условный формат на основе формулы к интересующему диапазону:

enter image description here 3. Для события selection_change:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ThisWorkbook.Names("THE_ROW").RefersTo = "=" & Target(1).Row
End Sub

Не вполне , как указано, поскольку он выделяет только заполненные ячейки ...

Использование CF для настройки заливки означает, что вам не нужно беспокоиться о перезаписи существующих заливок при выделении грести.

0 голосов
/ 06 марта 2020

Решенное решение 2, выделение активной строки:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    ActiveWorkbook.Names.Add Name:="MyRange", RefersToR1C1:=Range("A" & (ActiveCell.Row))
    Range("A" & (ActiveCell.Row)).Select                                                   'Always Selects Column A depending on the Active Row selected

    Cells.Interior.ColorIndex = 0

    With Target

        'Highlights the entire row that contain the active cell
        .EntireRow.Interior.Color = RGB(243, 243, 123)

    End With

End Sub

ТОЛЬКО выделение активной строки:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Cells.Interior.ColorIndex = 0

    With Target

        'Highlights the entire row that contain the active cell
        .EntireRow.Interior.Color = RGB(243, 243, 123)

    End With

End Sub
...