添加新数据时自动更新Excel字段

添加新数据时自动更新Excel字段,excel,vba,Excel,Vba,我有一个Excel文档,它以一些字段开头,这些字段来自对其下面的行所做的计算。为了进行计算,我目前有一个模块,其中包含大约4个函数,这些函数在第20行到第N行(第一个空白单元格)之间循环。这些函数直接从工作表顶部的单元格调用。问题在于,每当有人从下面的行中添加/删除数据时,顶部的计算不会更新。如何实现这一点?如果我正确理解了您的问题,您可以使用工作表更改事件来完成这些任务。在工作表模块中,添加工作表更改事件: Private Sub Worksheet_Change(ByVal rngChang

我有一个Excel文档,它以一些字段开头,这些字段来自对其下面的行所做的计算。为了进行计算,我目前有一个模块,其中包含大约4个函数,这些函数在第20行到第N行(第一个空白单元格)之间循环。这些函数直接从工作表顶部的单元格调用。问题在于,每当有人从下面的行中添加/删除数据时,顶部的计算不会更新。如何实现这一点?

如果我正确理解了您的问题,您可以使用
工作表更改事件来完成这些任务。

在工作表模块中,添加
工作表更改事件:

Private Sub Worksheet_Change(ByVal rngChanged As Range)

    ' Call your subs and functions here

    MsgBox "You just changed something!"

End Sub
请注意,
工作表\u Change
子项必须有且只能有一个
Range
类型的参数。Excel将使其成为图纸用户更改的范围的引用。如果要观察其行为,请尝试将此行放置在子菜单中:

rngChanged.Interior.ColorIndex = 4

多读一些,例如

如果您的函数是从工作表单元格调用的Excel VBA用户定义函数,那么如果自定义项引用的单元格不在自定义项的输入参数中,您将获得这种不重新计算行为

如果是这种情况,一个好的解决方案是定义一些动态命名范围,这些范围随着数据的添加/删除而扩展/收缩,并将它们用作函数的输入


另一个解决方案是将Application.Volatile添加到您的UDF中,但这会产生不良的副作用,即您的UDF将在每次计算时重新计算,这可能会非常缓慢。

有趣。。。“如果自定义项引用的单元格不在自定义项的输入参数中”是什么意思?如果UDF尝试将数据写入其接受作为输入参数的单元格以外的单元格,则这些单元格不会自动更新?如果函数Jean(A1)具有引用单元格B2的VBA,则当单元格B2发生更改时,Jean不会重新计算。这是因为Excel的smart recalc引擎只跟踪公式和函数中的易失性函数和引用。