我有一个从MSDN中获取的函数,它计算一个范围内具有另一个单元格颜色的单元格数。
这是代码
Function countCcolor(range_data As Range, criteria As Range) As Long
Application.Volatile
Application.ScreenUpdating = False
Dim datax As Range
Dim xcolor As Long
xcolor = criteria.Interior.ColorIndex
For Each datax In range_data
If datax.Interior.ColorIndex = xcolor Then
countCcolor = countCcolor + 1
End If
Next datax
Application.ScreenUpdating = True
End Function
此功能的要求是,当单元格的颜色值发生变化时,它将更新。
我的想法是创建一个事件,以便何时更改单元格的颜色并重新计算具有该功能的任何单元格,但我不确定这是否是最好的方法。
答案 0 :(得分:3)
您可能已经发现更改单元格的内部颜色不会触发Sub Worksheet_Change(...)
。由于没有更改任何值,因此不会重新计算任何值。在这种情况下,即使Application.Volatile
也没有帮助。
最好的方法可能是使用Worksheet_SelectionChange(...)
,最终与Worksheet_Activate(...)
和Worksheet_Deactivate(...)
结合使用(以便在进入和离开时让工作表清洁)以要求强制重新计算,例如
Sub DoMyRecalc()
' Range("OutputRange").Calculate ' all uses of countCcolor() within that range
' [H3].Calculate ' countCcolor() only used in cell H3
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
DoMyRecalc
End Sub
Private Sub Worksheet_Activate()
DoMyRecalc
End Sub
Private Sub Worksheet_Deactivate()
DoMyRecalc
End Sub