2013-08-20 29 views
0

简而言之:是否有一种方法可以定义不属于UDF的输入参数之一的依赖项?定义不是UDF的输入参数之一的依赖项?

这是我第一篇文章。我在Excel中学习VBA,我已经看到大量非常有才华的编码器在这里发布,所以在这里:

我想知道如何使UDF取决于单元格范围,但用户不必输入这个单元格范围。一个简单的例子是一个函数,它总是将单元格“A1”连接起来,并将输入连接到A1作为输出。如果范围在UDF内部被静态引用,那么当单元格“A1”被用户擦除时,范围不会变成“#REF”。

如果A1 =“你好”,然后输入是“世界”,我希望输出为“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 

想法?

编辑1:更具体地说,即使单元格A1不是输入参数,我希望函数更新单元格“A1”更改时的输出值。 例如我将A1改为现在是“blah”而不是“Hello”,那么值会更新为“blah World”。我会让这个函数变得不稳定,但是我有很多这样的函数,并且计算速度变得非常糟糕。

+0

感谢@ Charles-Williams,我将查看Worksheet_Change事件。 –

回答

-1

您不需要指定任何参数。像这样的东西就像一个魅力:

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

比方说,你有“你好”,在[A1]和“世界” [A2]。在单元格[A3]中,你编写了=CombineHelloAndWorld(),它给了你“Hello World”。

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

+0

卡洛斯,这不适用于自动计算,因为没有依赖关系。 –

0

只有2种方式,我知道做一个UDF重新计算时所内使用的细胞变化该UDF,但不是在参数列表:
- 使UDF挥发性
- 集workbook.forcefullcalculation为true

这两种解决方案使该UDF计算每计算:强制计算更加剧烈 - 它关闭智能计算并使每个公式计算

+0

第三种方式:可以检查Worksheet_Change事件以查看A1是否已更改单元格,并重新计算相关单元格 – SeanC