2013-08-20 61 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