Vba 应用程序的替代方案。用于自动更新自定义项的Volatile
我有一个来自MSDN的函数,它计算一个区域中具有另一种单元格颜色的单元格数量 这是密码Vba 应用程序的替代方案。用于自动更新自定义项的Volatile,vba,excel,Vba,Excel,我有一个来自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.
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
此函数的一个要求是,当单元格的颜色值发生变化时,它将更新
我的想法是在单元格颜色发生变化时创建一个事件,并让它使用函数重新计算任意单元格的颜色,但我不确定这是否是最好的方法。您可能已经发现,更改单元格的内部颜色不会触发子工作表更改(…)。由于未更改任何值,因此不会重新计算任何内容。在这种情况下,即使是
应用程序.Volatile
也没有帮助
最好的方法可能是使用工作表\u SelectionChange(…)
,最终与工作表\u Activate(…)
和工作表\u 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