替代 Application.Volatile 以自动更新 UDF [重复]
Posted
技术标签:
【中文标题】替代 Application.Volatile 以自动更新 UDF [重复]【英文标题】:Alternative to Application.Volatile to auto update UDF [duplicate] 【发布时间】:2014-08-05 18:17:41 【问题描述】:我有一个从 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
这个函数的一个要求是当单元格的颜色值改变时它会更新。
我的想法是在单元格的颜色发生变化时创建一个事件,并让它使用该函数重新计算任何单元格,但我不确定这是否是最好的方法。
【问题讨论】:
【参考方案1】:您可能已经发现更改单元格的内部颜色不会触发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
【讨论】:
以上是关于替代 Application.Volatile 以自动更新 UDF [重复]的主要内容,如果未能解决你的问题,请参考以下文章
是否有必要安装 Android Studio 以实现颤振或啥可以替代 android studio?
寻找 MySQL Workbench 的替代品以与 MariaDB 10 一起使用