2017-02-24 78 views
0

我有一個excel udf作爲listobj(excel表)的列之一。當我刷新表格時,我得到的結果是udf是否計算。一些單元重新獲得一些返回值#value。如果我選擇一個#value單元格並在公式欄中單擊並單擊「檢查」,它將正確評估。或者,如果我將它複製到列中,它會正確計算。 我已將工作表更改事件添加到.calculate listobj。excel udf在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

我把縮進與[Rubberduck的SmartIndenter](HTTP代碼的自由: //rubberduckvba.com/Indentation),以便它實際上可讀。充分披露,我是該項目的貢獻者。 – Comintern

+0

@ YowE3K - 不,當我縮進時,當我縮進時「縮進大小寫」設置錯誤,並且在我手動修復時顯然錯過了。哎呀!另一個自動化的好主意......修復。 – Comintern

回答

0

看起來你有2個的定義:一個是對UDF的參數,另一個是定義的命名得分了。
然後您使用[score]表示法評估定義的名稱。

所以Excel不知道有定義的名稱分數的依賴,並因此UDF不重計算當您更改定義的名稱得分

+0

不確定我遵循「定義的名字」得分的含義。我稍微改動了一些東西,刪除了括號,並將UDF得分參數傳遞給了一個變量。儘管如此,仍然表現得如此。我還在工作表更改事件後添加了代碼。 – TeleJim