基于语言表,A列=语言,B =数字,C =有色单元
我想知道什么是VBA,所以每当我在B列上键入一个数字(使用Workbook_SheetChange)时,C的颜色都是Colorindex等于键入的数字。
另一方面,我确信是上一个问题的解决方案的一部分,关于VBA我如何写cell.Interior.ColorIndex =(特定的单元格值,如果B2 = 4 - >为行,整个或直到最后一列有数据,cell.Interior.ColorIndex = 4)并为整行着色。
谢谢
答案 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