我想編寫一個使用我已定義爲參數的類的自定義工作表函數。我試圖做到以下幾點:使用類作爲自定義工作表函數的參數
我創建了一個名爲包裝類:
Private m_value As Integer
Public Property Get value() As Integer
value = m_value
End Property
Public Property Let value(value As Integer)
m_value = value
End Property
然後我寫了兩個功能:
Function make_wrapper(value As Integer) As wrapper
Set make_wrapper = New wrapper
make_wrapper.value = value
End Function
Function square(wrapper As wrapper) As Integer
square = wrapper.value * wrapper.value
End Function
如果我直接從VBA連鎖的功能,一切正常如我所料
Sub doit()
MsgBox (square(make_wrapper(7)))
End Sub
顯示49
如果我嘗試直接從Excel中調用該函數,它不起作用。如果我在單元格中鍵入「= square(make_wrapper(7))」,它會顯示「#VALUE!」。我究竟做錯了什麼?這可能嗎?
似乎從來沒有用這兩個公式調用「square」 - 也許Excel在公式中收到非標準值時立即停止?你可以定義一個單獨的函數,這個函數實際上是將square(make_wrapper(foo))作爲整數返回(即使從Excel工作表也可以)。 – enderland
是的,但這正是我所做的*不*想要做的。我想用它來構造函數的非常複雜的參數,並通過使用不同的類作爲參數來獲得一些「類型安全」。 – MadScientist
我希望Excel不喜歡在UDF中從第一個函數make_wrapper返回的類型'wrapper'。嘗試重寫以輸出已知類型,例如'Variant' – user3357963