2016-11-30 2 views
0

на основе таблицы языка, колонка А = Язык, B = число, C = coloredcellCell Цвет салона Индекс Excel VBA

Я хотел бы знать, что такое VBA так всякий раз, когда я набираю номер на колонке B (используя Workbook_SheetChange), C окрашен в Colorindex, равный введенному числу.

С другой стороны, и я уверен, является частью решения предыдущего вопроса, на VBA, как мне написать cell.Interior.ColorIndex = (конкретное значение ячейки, если B2 = 4 -> для строки , целые или до последнего столбца имеют данные, cell.Interior.ColorIndex = 4) и окрашивают всю строку.

Спасибо

ответ

1

Функция sheetchange имеет target в качестве аргумента, что это клетка, что вы изменили. Вы можете использовать его, чтобы изменить соответствующую ячейку:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 2 Then 
     Target.Offset(0,1).Interior.ColorIndex = Target.Value 
     'and for the whole row 
     Target.EntireRow.Interior.Color = Target.Offset(0,1).Interior.Color 
    Endif 
End Sub 
+0

Спасибо. Вторая часть отсутствует, но спасибо – andnand

+0

Вы можете получить всю строку тоже, это обычно один вопрос и ответ на сообщение на этом сайте mind ;-) –

+0

добавил немного, чтобы установить всю строку в один и тот же «цвет», обратите внимание на использование ' color' вместо 'colorindex' для' wholeRow' –

0

правой кнопкой мыши на имени листа, на котором вы хотите эту функцию, и нажмите на кнопку «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 
+0

Спасибо, отлично работает, как насчет частичной строки, пока последний столбец не имеет данных – andnand

0

код Ник Dewitt в порядке, но цвет только столбец C.

Если вы хотите, чтобы цвет всю строку, начиная с от C в зависимости от количества столбцов в строке:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim lastcol As Integer, i As Integer 

    If Target.Column = 2 Then 
     lastcol = Cells(Target.Row, Columns.Count).End(xlToLeft).Column 
     For i = 3 To lastcol 
      Target.Offset(0, i - 2).Interior.ColorIndex = Target.Value 
     Next i 
    End If 
End Sub 
Смежные вопросы