我想编写一个使用我已定义为参数的类的自定义工作表函数。我试图做到以下几点:使用类作为自定义工作表函数的参数
我创建了一个名为包装类:
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