2011-09-12 107 views
0

我在VBA中爲excel創建了一個函數,它基於不同的單元格計算某個範圍內特定顏色的單元格的數量。這適用於第一次運行該函數,但是,如果將範圍內某個單元格的顏色更改爲計算的顏色,或者將顏色更改爲該顏色,則該值不會更新。我如何得到它,所以每當我改變顏色時函數都會不斷更新?工作簿計算設置爲自動。Excel值不更新

Function CountColor(rSumRange As Range) 

Dim rCell As Range 
Dim iCol As Integer 
Dim vResult 

iCol = Range("P1").Interior.ColorIndex 
For Each rCell In rSumRange 
    If rCell.Interior.ColorIndex = iCol Then 
     vResult = vResult + 1 
    End If 
    Next rCell 

CountColor = vResult 
End Function 
+0

你的意思是 - 我怎麼去運行功能,只要在範圍內變化的任何單元格? – diagonalbatman

+0

這就是我的意思! –

回答

3

更改顏色不會觸發Worksheet_Change()並不會觸發任何Application.Calculate

如果工作簿中並沒有太多的公式,你可以試試這個笨重解決方案:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Application.Calculate 
End Sub 
+0

這是(目前)我擁有的唯一配方,但它使用了〜20次。我將這添加到代碼中,但仍然每當我更改顏色時,值仍然不更新。 編輯:無視這個 - 我有時相當愚蠢。 –

+0

這將無法正常工作:您需要使功能不穩定。然後,如果您還希望函數在您改變顏色時唯一要重新計算,則還需要使用Max; s選擇更改宏。但是要小心:這兩個操作都會顯着減慢重新計算 –

1

它會在某些性能爲代價,但您可以添加「Application.Volatile」在代碼裏面,這樣可以在工作表發生變化時重新計算。

編號:http://msdn.microsoft.com/en-us/library/aa213653(v=office.11).aspx

+0

很好的參考+1 – JMax

+0

這對每當我改變工作表中的內容都很有幫助,但是可悲的改變顏色並沒有引發Worksheet_Change()的事情。有什麼辦法可以改變顏色嗎? –

+0

啊,你的權利似乎在這種情況下不起作用。最好的事情,我能想到的,如果你真的想自動計算,是創建一個工作表選擇更改事件,將取代公式= =,引發重新計算。 – aevanko