单元格内部颜色索引Excel VBA

时间:2016-11-30 20:38:24

标签: excel vba excel-vba

基于语言表,A列=语言,B =数字,C =有色单元

我想知道什么是VBA,所以每当我在B列上键入一个数字(使用Workbook_SheetChange)时,C的颜色都是Colorindex等于键入的数字。

另一方面,我确信是上一个问题的解决方案的一部分,关于VBA我如何写cell.Interior.ColorIndex =(特定的单元格值,如果B2 = 4 - >为行,整个或直到最后一列有数据,cell.Interior.ColorIndex = 4)并为整行着色。

谢谢

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

右键单击要使用此功能的工作表名称,然后单击“查看代码”。

现在您需要编写一个VBA函数,该函数会在对工作表的任何更改时触发。这是一个名为Worksheet_Change(Range)的内置函数。范围对象(它的参数)是此函数触发时已更改的范围。

Private Sub Worksheet_Change(ByVal Target As Range)
End Sub

在函数内部,您需要检查更改的单元格是否在列B中。这由目标范围的Column属性完成。

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

编辑:要仅将单元格着色到行中的最后一个值,您需要计算该行中已填充单元格的数量。以下代码执行此操作(请参阅注释以了解它)

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

答案 2 :(得分:0)

Nick 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