2015-11-17 25 views
1

場景:我有一個包含諸如「過期任務」之類的貼圖的儀表板。我有一個叫tileOverdueTasks的形狀。最重要的是我有一個價值爲=Z11的藝術家。單元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 

更新:我已經改變了事件Worksheet.calculate由@Scott克拉納的建議。現在事件發生,甚至進入適當的狀態,但是顏色沒有變化。

+2

查找到Worksheet_calculate事件。 –

+0

這有幫助,但請看我的編輯。我把一些MsgBox的,所以我知道它正在進入適當的條件,但形狀顏色不會改變。 –

+0

想通了,它需要'Fill.ForeColor'。請發表一個答案,我會aCcept。 –

回答

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