2011-09-12 72 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