简而言之:有没有办法定义一个不是UDF输入参数之一的依赖项?
这是我在这里的第一篇文章。我正在学习Excel中的VBA,我在这里看到了大量非常有才华的编码员,所以在这里:
我想知道如何制作依赖于单元格范围的UDF,但用户不必输入此单元格范围。一个简单的例子是一个函数,它总是取单元格“A1”并将输入连接到A1作为输出。如果范围是在UDF内部静态引用的,那么当用户擦除单元格“A1”时,范围将不会变为“#REF”。
如果A1 =“Hello”,然后输入为“World”,我希望输出为“Hello World”。
我想也许我可以在一个函数中调用一个函数,并且依赖树将基于它构建(见下文),但我的测试函数不会更新,除非我更改了第一个函数的调用(in1)的输入参数
测试代码:
Public Function test(in1 As String) As String
test = testdep(in1, Sheets("Sheet1").Range("A1"))
End Function
Private Function testdep(in1 As String, rng As Range)
testdep = rng.Value & in1
End Function
想法?
Edit1:更具体地说,我希望函数在单元格“A1”改变时更新输出值,即使单元格A1不是输入参数。 例如。我将A1改为现在为“blah”而不是“Hello”,然后该值将更新为“blah World”。我会把函数设置为volatile,但是我有很多这样的函数,并且计算速度非常快。
答案 0 :(得分:0)
当UDF内部使用的单元格更改但不在参数列表中时,我只知道有两种方法可以重新计算UDF:
- 使UDF易变
- 将workbook.forcefullcalculation设置为true
这两种解决方案都可以在每次计算时计算udf:强制完全计算更加激烈 - 它会关闭智能重计算并使每个公式计算
答案 1 :(得分:-1)
您无需指定任何参数。像这样的东西就像一个魅力:
Public Function CombineHelloAndWorld() As String
CombineHelloAndWorld = Range("A1") & " " & Range("A2")
End Function
假设您在[A1]
中有“Hello”,在[A2]
中有“World”。在单元格[A3]
中,您编写=CombineHelloAndWorld()
,它会为您提供“Hello World”。
如果Application.Calculation
设置为xlCalculationAutomatic
,如果您更改[A3]
或[A1]
[A2]