定义不是UDF的输入参数之一的依赖项?

时间:2013-08-20 06:40:01

标签: excel vba input parameters dependencies

简而言之:有没有办法定义一个不是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,但是我有很多这样的函数,并且计算速度非常快。

2 个答案:

答案 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]