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不更新的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Server DB 更新单独工作表中的数据后自动刷新 Excel 2007 数据透视表

[Echarts]React项目中无法刷新数据

如何刷新数据透视图

在PHP中怎么实现新增数据,刷新表格,而不刷新整个页面。

list做MySQL假缓存怎么在调用接口后自动刷新假缓存

Excel vba 刷新等待