excel udf在listobj刷新

时间:2017-02-24 23:07:08

标签: excel vba excel-vba

我有一个excel udf作为listobj(excel表)的列之一。当我刷新表格时,我会得到关于udf是否计算的混合结果。一些细胞重新计算一些返回#value。如果我选择#value单元格并单击公式栏并单击“检查”,则会正确评估。或者,如果我将其复制到列中,则可以正确计算。 我已经为.calculate 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

1 个答案:

答案 0 :(得分:0)

看起来你有两个得分定义:一个是udf的参数,另一个是定义的命名得分。
然后使用[score]表示法评估定义的名称。

所以Excel不知道定义的名称得分存在依赖性,因此当您更改定义的名称得分时UDF不会重新计算