触发重新计算某些UDF

时间:2017-08-08 18:38:34

标签: vba excel-vba excel

想象一下,我有一个UDF MyFunc,用户可以在Excel中调用此函数,如=MyFunc(A1)

在幕后,MyFunc引用了一定范围的细胞。为简化起见,我们假设MyFunc等同于Vlookup(A1, B1:E10, 4, FALSE),因此B1:E10是硬编码的

我了解当计算模式设置为automatic时,结果会在A1更新时更新。问题是:

如何设计此功能,以便在A1B1:E10更改时更新?

我可以明确地添加某种引用,以便在VBA中查看此函数的位置吗?

请咨询

编辑1

Public Function MyFunc(val As Variant) As Variant MyFunc = Application.VLookup(val, Range("B1:E10"), 2, False) End Function

我希望像下面这样的东西能起作用,但显然它不会

Public Function MyFunc(val As Variant, Optional rng As Range = Range("B1:E10")) As Variant MyFunc = Application.VLookup(val, rng, 2, False) End Function

编辑2

我能想到的一种方法是跟踪excel电子表格中MyFunc的调用位置,并在引用的范围B1:E10发生变化时触发这些单元格的重新计算。但我不确定如何实现它。

1 个答案:

答案 0 :(得分:1)

创建一个由保存数据的工作表的工作表更改事件触发的例程(B1:B10)。检查更改的范围是否在您的范围内,如果是,请遍历所有工作表中的所有公式以找到您的udf并在其上使用range.calculate