场景:我有一个带有磁贴的仪表板,用于诸如"过期任务"之类的东西。我的形状叫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
。现在事件发生了,它甚至进入了正常状态,但颜色没有变化。
答案 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