правой кнопкой мыши на имени листа, на котором вы хотите эту функцию, и нажмите на кнопку «View Code».
Теперь вам нужно написать функцию VBA, которая срабатывает при любых изменениях на рабочем листе. Это встроенная функция, называемая Worksheet_Change(Range)
. Объект диапазона (его аргумент) - это диапазон, который был изменен при запуске этой функции.
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
Внутри функции вы должны проверить, была ли измененная ячейка в столбце B. Это делается с помощью свойства столбца диапазона Target.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
' The changed cell was in column B
End If
End Sub
Теперь вам нужно получить значение ячейки и поместить его как ColorIndex в строке.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
ColorValue = Target.Value
Target.EntireRow.Interior.ColorIndex = ColorValue
End If
End Sub
Edit: Для того, чтобы окрасить клетки только до последнего значения в строке, вам нужно подсчитать количество заполненных ячеек в строке. Следующий код делает что (см комментарии, чтобы понять это)
Private Sub Worksheet_Change(ByVal Target As Range)
' Check if the edited cell is in column B
If Target.Column = 2 Then
' Get the value of the edited cell
ColorValue = Target.Value
' Get the row number of the edited cell
RowNumber = Target.Row
' Get the number of filled cells in this row
CellsCount = Application.WorksheetFunction.CountA(Range(RowNumber & ":" & RowNumber))
' Apply the color formatting till the last column in this row
Range(Cells(RowNumber, 1), Cells(RowNumber, CellsCount)).Interior.ColorIndex = ColorValue
End If
End Sub
Спасибо. Вторая часть отсутствует, но спасибо – andnand
Вы можете получить всю строку тоже, это обычно один вопрос и ответ на сообщение на этом сайте mind ;-) –
добавил немного, чтобы установить всю строку в один и тот же «цвет», обратите внимание на использование ' color' вместо 'colorindex' для' wholeRow' –