我需要一个可以自动更改单元格颜色的宏

时间:2018-10-26 14:29:21

标签: excel vba

我需要根据其中包含的值来更改同一单元格的颜色。

我写了这段代码,它起作用了:

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

问题在于它不会自动更改颜色。然后,如果此单元格中的值取决于某个函数,并且我更改了该函数使用的值,即使该单元格中的值发生了更改,颜色也保持不变。 要使颜色变成彩色,我必须在每次输入时按一次。我希望它的工作方式类似于条件格式。

1 个答案:

答案 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返回范围,则必须进行循环以在所有单元格上调用该函数。