0

简而言之:有没有办法定义不是 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”。我会让函数变得易变,但是我有很多这样的函数,计算速度变得非常昏昏沉沉。

4

2 回答 2

0

当 UDF 内部使用但不在参数列表中的单元格发生更改时,我知道只有 2 种方法可以重新计算 UDF:
- 使 UDF 易失
- 将 workbook.forcefullcalculation 设置为 true

这两种解决方案都使 udf 在每次计算时都进行计算:强制完全计算更加激烈 - 它关闭智能重新计算并让每个公式计算

于 2013-08-20T08:15:25.213 回答
-1

您无需指定任何内容作为参数。像这样的东西就像一个魅力:

Public Function CombineHelloAndWorld() As String
    CombineHelloAndWorld = Range("A1") & " " & Range("A2")
End Function

假设您有“Hello” in[A1]和“World” in [A2]。在[A3]你写的单元格中=CombineHelloAndWorld(),它会给你“Hello World”。

此外,如果Application.Calculation设置为,如果您更改或xlCalculationAutomatic更改,它将自动更改[A3][A1][A2]

于 2013-08-20T07:33:27.700 回答