想象一下,我有一个UDF MyFunc
,用户可以在Excel中调用此函数,如=MyFunc(A1)
在幕后,MyFunc引用了一定范围的细胞。为简化起见,我们假设MyFunc等同于Vlookup(A1, B1:E10, 4, FALSE)
,因此B1:E10
是硬编码的
我了解当计算模式设置为automatic
时,结果会在A1
更新时更新。问题是:
如何设计此功能,以便在A1
或B1: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
发生变化时触发这些单元格的重新计算。但我不确定如何实现它。
答案 0 :(得分:1)
创建一个由保存数据的工作表的工作表更改事件触发的例程(B1:B10)。检查更改的范围是否在您的范围内,如果是,请遍历所有工作表中的所有公式以找到您的udf并在其上使用range.calculate