listobj刷新后excel udf不更新
Posted
技术标签:
【中文标题】listobj刷新后excel udf不更新【英文标题】:excel udf not updating after listobj refresh 【发布时间】:2017-02-24 23:07:07 【问题描述】:我有一个 excel udf 作为 listobj(excel 表)的列之一。当我刷新表格时,我会得到关于 udf 是否计算的混合结果。一些单元格重新计算一些返回#value。如果我选择 #value 单元格并单击公式栏中并单击“检查”,它会正确评估。或者,如果我将它复制到它计算正确的列中。 我添加了一个工作表更改事件来计算 listobj。
感谢任何建议。
这是我的用户定义函数。
Function colorscore(dest, score)
Dim scr
scr = score
Select Case scr
Case Is = 99
srcred = 255
srcgreen = 0
srcblue = 0
Case Is > 0
srcred = (1 - scr) * 255
srcgreen = 255 - ((255 - 176) * scr)
srcblue = scr * 80
Case Else
srcred = 255
srcgreen = 255
srcblue = 255
End Select
dest.Parent.Evaluate "ChangeIt2(" & dest.Address(False, False) & "," _
& srcred & "," _
& srcgreen & "," _
& srcblue & "" _
& ")"
colorscore = "Changed sheet!" 'or whatever return value is useful...
End Function
Sub ChangeIt2(c1 As Range, c2red, c2green, c2blue)
c1.Interior.Color = RGB(c2red, c2green, c2blue)
End Sub
这是工作表更改事件
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.ListObject Is Nothing Then Exit Sub
ActiveSheet.EnableCalculation = False
ActiveSheet.EnableCalculation = True
End Sub
【问题讨论】:
我冒昧地用Rubberduck's SmartIndenter 缩进了你的代码,这样它实际上是可读的。完全披露,我是该项目的贡献者。 @YowE3K - 不。当我缩进时,我的“缩进大小写”设置错误,当我手动修复它时显然错过了。哎呀!自动化它的另一个很好的论据......已修复。 【参考方案1】:看起来你有两个分数定义:一个是 udf 的参数,另一个是定义的命名分数。 然后您使用 [score] 表示法评估定义的名称。
所以 Excel 不知道定义的名称分数存在依赖关系,因此当您更改定义的名称分数时 UDF 不会重新计算
【讨论】:
不确定我是否理解您所说的“定义名称”分数。我做了一些改动,去掉了括号,将传入的 UDF 分数参数分配给了一个变量。尽管如此,仍然表现得像以前一样。我还添加了工作表更改事件背后的代码。以上是关于listobj刷新后excel udf不更新的主要内容,如果未能解决你的问题,请参考以下文章