gpt4 book ai didi

vba - 自动更新 UDF 的 Application.Volatile 替代方案

转载 作者:行者123 更新时间:2023-12-03 02:47:22 26 4
gpt4 key购买 nike

我有一个从 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

此函数的一个要求是,当单元格的颜色值发生变化时,它就会更新。

我的想法是在单元格颜色发生更改时创建一个事件,并让它重新计算具有该函数的任何单元格,但我不确定这是否是最好的方法。

最佳答案

您可能已经发现,更改单元格的内部颜色不会触发 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

关于vba - 自动更新 UDF 的 Application.Volatile 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25145698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com