2011-05-03 69 views
0

我有一個Excel文檔,其中一些字段來自對其下方行進行計算的字段。爲了進行計算,我目前有一個模塊,其中有大約4個函數循環遍歷第20行到第N個空白單元格。這些函數直接從工作表頂部的單元格中調用。問題是,當有人從下面的行中添加/刪除數據時,頂部的計算不會更新。這如何實現?添加新數據時Excel字段自動更新

回答

2

如果您的函數是從工作表單元格調用的Excel VBA用戶定義函數,那麼如果UDF引用不在UDF的輸入參數中的單元格,則會得到此非重新計算行爲。

如果這是一個很好的解決辦法是定義一些動態命名區域展開數據的添加/刪除,並把它們作爲輸入功能/合同的情況。

另一種解決方案是Application.Volatile添加到您的UDF,但有不良副作用,即您的UDF將在每個計算可以是痛苦的緩慢重新計算。

+0

有趣......你是什麼意思「如果UDF是指不在UDF的輸入參數中的單元格」?如果UDF嘗試將數據寫入除它接受的輸入參數以外的單元格,那麼這些單元格將不會自動更新? – 2011-05-04 18:32:00

+0

如果函數Jean(A1)具有引用單元格B2的VBA,那麼當單元格B2更改時,Jean不會重新計算。這是因爲Excel的智能重算引擎僅跟蹤公式和函數中的易失性函數和引用。 – 2011-05-05 07:25:54

0

如果我正確理解您的問題,則可以使用Worksheet_Change事件來完成此類任務。

0

在您的工作表模塊,添加Worksheet_Change事件:

Private Sub Worksheet_Change(ByVal rngChanged As Range) 

    ' Call your subs and functions here 

    MsgBox "You just changed something!" 

End Sub 

注意,Worksheet_Change必須有一個和Range類型的只有一個參數。 Excel將使其成爲表單用戶更改範圍的參考。如果您想觀察其行爲,請嘗試將此行放入子文件中:

rngChanged.Interior.ColorIndex = 4 

閱讀更多內容here