Страницы: 1
RSS
выделение строк при форматировании ячейки макросом
 
Добрый вечер!
Подскажите пожалуйста как доработать следующий макрос:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static oldRow As Long
On Error Resume Next
Rows(oldRow).Interior.ColorIndex = xlColorIndexNone
Target.EntireRow.Interior.Color = RGB(234, 244, 234) 'светло-зеленый
oldRow = Target.Row
End Sub

Выше приведенный код, работает почти "как надо" - выделяет всю строку при перемещении по ячейкам, хотелось бы доработать так - что бы он выделял не всю строку, а только первые 30 ячеек строки и только при перемещении по ячейкам из столбца P, а не по всем ячейкам листа.
Изменено: Nik035 B - 13.03.2025 20:42:46
 
Цитата
только при перемещении по ячейкам из столбца P, а не по всем ячейкам листа.
Код
If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки
    If Not Intersect(Target, Columns("P")) Is Nothing Then

Цитата
Только первые 30 ячеек строки
Код
Range(Cells(Target.Row,1), Cells(Target.Row,30)).Interior.Color = RGB(234, 244, 234) 'светло-зеленый
 
Цитата
Nik035 B написал:
только первые 30 ячеек
звучит не однозначно. Относительно чего, от столбца А или от выделенной ячейки?
 
Спасибо! буду пробовать, но в макросах я полный "0", (выше приведенный код нашел на просторах интернета)
подскажите вместо какой строки нужно вставить эти две строки?

If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки
   If Not Intersect(Target, Columns("P")) Is Nothing Then

эта строка Range(Cells(Target.Row,1), Cells(Target.Row,30)).Interior.Color = RGB(234, 244, 234) 'светло-зеленый
скорее всего вместо этой Target.EntireRow.Interior.Color = RGB(234, 244, 234) 'светло-зеленый?
Изменено: Nik035 B - 14.03.2025 17:38:09
 
Цитата
написал:
звучит не однозначно. Относительно чего, от столбца А или от выделенной ячейки?
Согласен - не однозначно. Я имел ввиду первые 30 ячеек начиная с столбца А, или можно все ячейки левее столбца Р
Изменено: Nik035 B - 14.03.2025 12:56:32
 
Куда в существующий макрос добавить этот код

If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки
  If Not Intersect(Target, Columns("P")) Is Nothing Then

я не разобрался - вроде все варианты перепробовал - выдает ошибку =(.


Этот код

Range(Cells(Target.Row,1), Cells(Target.Row,30)).Interior.Color = RGB(234, 244, 234) 'светло-зеленый

работает как надо, спасибо за помощь!
 
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки
  If Not Intersect(Target, Columns("P")) Is Nothing Then
    Range(Cells(Target.Row, 1), Cells(Target.Row, 30)).Interior.Color = RGB(234, 244, 234) 'светло-зеленый
  End If
End Sub
 
Спасибо! но что то с ним не так...он не очищает за собой ранее выделенные строки.

первоначальный вариант в сцепке с (Range(Cells(Target.Row, 1), Cells(Target.Row, 30)).Interior.Color = RGB(234, 244, 234) ) работает как надо, но для всех ячеек, а хотелось бы только для ячеек из ст.Р

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static oldRow As Long
On Error Resume Next
Rows(oldRow).Interior.ColorIndex = xlColorIndexNone
Range(Cells(Target.Row, 1), Cells(Target.Row, 30)).Interior.Color = RGB(234, 244, 234) 'светло-зеленый
oldRow = Target.Row
End Sub
 
Цитата
он не очищает за собой ранее выделенные строки.
Вставьте строку
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки
  If Not Intersect(Target, Columns("P")) Is Nothing Then
    Cells.Interior.ColorIndex = xlColorIndexNone
    Range(Cells(Target.Row, 1), Cells(Target.Row, 30)).Interior.Color = RGB(234, 244, 234) 'светло-зеленый
  End If
End Sub

Удачи!
 
Спасибо!, все работает!, но при переходе в любые другие ячейки не из ст.Р, последняя выделенная (по ст.Р. ) строка почему то остается выделенной?
 
Если нужно при
Цитата
при переходе в любые другие ячейки не из ст.Р,
убирать выделение, то добавьте строки
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки
  If Not Intersect(Target, Columns("P")) Is Nothing Then
    Cells.Interior.ColorIndex = xlColorIndexNone
    Range(Cells(Target.Row, 1), Cells(Target.Row, 30)).Interior.Color = RGB(234, 244, 234) 'светло-зеленый
  Else
    Cells.Interior.ColorIndex = xlColorIndexNone
  End If
End Sub
 
Спасибо за помощь!!! то что нужно!
Страницы: 1
Читают тему
Наверх