2017-02-24 9 views
0

私はlistobj(excelテーブル)の列の1つとしてexcel udfを持っています。テーブルをリフレッシュすると、udfが計算されるかどうかに応じて混合結果が得られます。いくつかのセルはいくつかのリターン#値を再計算します。 #valueセルを選択し、数式バーをクリックして「チェック」をクリックすると、正しく評価されます。または、それを列の下にコピーすると、正しく計算されます。 リストシートを計算するためにワークシート変更イベントを追加しました。excel udfがlistobj更新後に更新されない

アドバイスはありがとうございます。

私のユーザー定義関数は次のとおりです。あなたは、スコアの2つの定義を持っているように、ここで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 

Function colorscore(dest, score) 

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

を獲得します//rubberduckvba.com/Indentation)実際に読めるようにします。完全な開示、私はそのプロジェクトの貢献者です。 – Comintern

+0

@ YowE3K - いいえ。私がインデントしたとき、インデントしたときに「インデントケース」の設定が間違っていて、手動で固定したときに見逃してしまったようです。おっと!それを自動化するもう一つの良い議論...固定。 – Comintern

答えて

0

が見えるワークシート変更イベントです:1は、UDFのパラメータであり、他方は名前の定義されていますスコア。
次に、[スコア]表記を使用して定義された名前を評価します。 :

ので、Excelは依存性が定義された名前のスコアであることを知らないと、あなたが定義した名前を変更するときにUDFが再計算されませんが、私は[RubberduckのSmartIndenter](httpであなたのコードをインデントの自由を取った

+0

私はあなたが '定義された名前'のスコアについて何を意味しているかわかりません。私は物事を少し変更し、括弧を削除し、渡されたUDFスコアパラメータを変数に割り当てました。以前と同じように動作します。また、ワークシート変更イベントの背後にコードを追加しました。 – TeleJim

関連する問題