我需要根据其中包含的值来更改同一单元格的颜色。
我写了这段代码,它起作用了:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G47")) Is Nothing Then
With Target.Interior
Select Case Target.Value
Case 0: .Color = RGB(Range("F4"), Range("G4"), Range("H4"))
Case 1 To 2: .Color = RGB(220, 0, 0)
Case 3 To 4: .Color = RGB(255, 0, 0)
Case 5 To 6: .Color = RGB(255, 102, 0)
Case 7 To 8: .Color = RGB(255, 165, 0)
Case 9 To 10: .Color = RGB(255, 215, 0)
Case 11 To 12: .Color = RGB(255, 255, 150)
Case 13 To 14: .Color = RGB(180, 255, 102)
Case 15 To 16: .Color = RGB(102, 255, 102)
Case 17 To 18: .Color = RGB(51, 204, 51)
Case 19 To 20: .Color = RGB(0, 140, 0)
Case Is > 20: .Color = RGB(0, 90, 0)
End Select
End With
End If
End Sub
问题在于它不会自动更改颜色。然后,如果此单元格中的值取决于某个函数,并且我更改了该函数使用的值,即使该单元格中的值发生了更改,颜色也保持不变。 要使颜色变成彩色,我必须在每次输入时按一次。我希望它的工作方式类似于条件格式。
答案 0 :(得分:-1)
我相信您的代码无法正常工作,因为您要更改的单元格通过公式与您要设置格式的单元格链接。在这种情况下,您可以按照以下步骤操作
让您将变色功能作为单独的功能并将其添加到模块中,并将其命名为例如formatColor(Range)
在此函数中添加图纸引用,以便在正确的图纸上工作
在您的Worksheet_Change(按目标的ByVal目标)中将此函数调用为
Private Sub Worksheet_Change(ByVal Target As Range)
Call formatColor(Target)
End Sub
现在,如果源数据在另一个工作表中,则从该工作表的Worksheet_Change调用此函数
Private Sub Worksheet_Change(ByVal Target As Range)
range_list = Target.Dependents.Address
range_array = Split(range_list, ",")
For Each r In range_array
Call formatColor(r)
Next
End Sub
您必须在此之上插入相交检查。 如果在同一张纸中,则可以相应地修改代码
如果Target.Dependents.Address返回范围,则必须进行循环以在所有单元格上调用该函数。