根据具有计算值的单元格更新形状颜色

时间:2015-11-17 17:59:17

标签: excel excel-vba vba

场景:我有一个带有磁贴的仪表板,用于诸如"过期任务"之类的东西。我的形状叫tileOverdueTasks。最重要的是,我有一个值为=Z11的wordart。单元格Z11基于单独的表(Sheet5 (Tasks))中的值计算。如果Tasks.Z11 = 0我希望tileOverdueTasks为绿色。如果是其他任何东西,我希望它是红色的。

我找到了下面的代码,但它似乎没有触发,我假设由于单元格Z11没有手动更改,因此ActiveWorkbook也没有。那么,在上面的场景中,如何修改它呢?

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("Z11")) Is Nothing Then
        If IsNumeric(Target.Value) Then
            If Target.Value > 0 Then
                ActiveSheet.Shapes("tileOverdueTasks").Fill.BackColor.RGB = vbRed
            Else
                ActiveSheet.Shapes("tileOverdueTasks").Fill.BackColor.RGB = vbGreen
            End If
        End If
    End If
End Sub

更新:我已根据@Scott Craner的建议将事件更改为Worksheet.calculate。现在事件发生了,它甚至进入了正常状态,但颜色没有变化。

1 个答案:

答案 0 :(得分:1)

有两个问题。

1)正如Scott Craner所指出,我需要使用Worksheet_Calculate事件。

2)由于形状的风格,Fill.BackColor无效。我将其更改为Fill.ForeColor,现在可以正常使用。

以下是工作代码:

Private Sub Worksheet_Calculate()
    If Sheets("Dashboard").Range("Z11").Value > 0 Then
        Sheets("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(185, 0, 0)
    Else
        Sheets("Dashboard").Shapes("tileOverdueTasks").Fill.ForeColor.RGB = RGB(0, 185, 0)
    End If
End Sub