Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 我需要一个可以自动改变单元格颜色的宏_Excel_Vba - Fatal编程技术网

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

Excel 我需要一个可以自动改变单元格颜色的宏,excel,vba,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:

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

我写了这段代码,它可以工作:

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
问题是它不会自动改变颜色。然后,如果这个单元格中的值依赖于一个函数,并且我更改了该函数使用的值,那么即使单元格中的值更改,颜色也保持不变。
要使chenge成为颜色,我必须每次按enter键。我希望它像条件格式一样工作。

我认为您的代码不起作用,因为您正在更改的单元格通过公式与您要格式化的单元格链接。如果是这种情况,您可以按照以下步骤操作

将颜色更改函数作为单独的函数添加到模块中,并将其命名为formatColor(Range)

在此函数中添加图纸引用,使其在正确的图纸上工作

在您的工作表中调用此函数。\u更改(ByVal目标为范围)为

现在,如果源数据位于另一个工作表中,请从该工作表的工作表中调用此函数

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

我认为您的代码不起作用,因为您要更改的单元格通过公式与要格式化的单元格链接。如果是这种情况,您可以按照以下步骤操作

将颜色更改函数作为单独的函数添加到模块中,并将其命名为formatColor(Range)

在此函数中添加图纸引用,使其在正确的图纸上工作

在您的工作表中调用此函数。\u更改(ByVal目标为范围)为

现在,如果源数据位于另一个工作表中,请从该工作表的工作表中调用此函数

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返回一个范围,则必须循环调用所有单元格上的函数。

不能使用条件格式吗?对于条件格式,我只找到了三个不同的值,我需要12种不同的颜色。这个解决方案是我找到的最好的解决方案,但不幸的是它不是动态重复的,但不是如此:尝试使用工作表\u Calculate事件。另外,正如一个小提示:如果Intersect(Target,Range(“G47”)(如果Intersect,Target,Range(“G47”))什么都不是,那么Exit Sub将删除嵌套级别,并使代码更具可读性。此外,这是否用于字符表?是的,解决方案似乎是使用calculate()而不是change()。但是我无法使它与calculate()一起工作。有人能帮我修改一下calculate吗?你不能使用条件格式吗?对于条件格式,我只找到了三个不同的值,我需要12种不同的颜色。这个解决方案是我找到的最好的解决方案,但不幸的是它不是动态重复的,但不是如此:尝试使用工作表\u Calculate事件。另外,正如一个小提示:如果Intersect(Target,Range(“G47”)(如果Intersect,Target,Range(“G47”))什么都不是,那么Exit Sub将删除嵌套级别,并使代码更具可读性。此外,这是否用于字符表?是的,解决方案似乎是使用calculate()而不是change()。但是我无法使它与calculate()一起工作。有人能帮我用计算器修改一下吗?