使用类作为自定义工作表函数的参数

时间:2012-09-03 14:51:15

标签: excel vba excel-vba

我想编写一个自定义工作表函数,它使用我已定义为参数的类。我试图做以下事情:

我创建了一个名为Wrapper的类:

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!”。我究竟做错了什么?这有可能吗?

2 个答案:

答案 0 :(得分:0)

似乎没有人给你一个明确的答案。

  

这有可能吗?

您不能将自定义类型返回给这样的UDF。

请改为尝试:

Function square(iValue) As Integer
    Dim w As New wrapper

    w.value = iValue

    square = w.value * w.value
End Function

虽然我不确定你试图用类模块实现什么。

答案 1 :(得分:-1)

参数名称无效:'Wrapper'已经是类的名称。

试试这个:

Function square(MyWrapper As wrapper) As Integer   
    square = MyWrapper.value * MyWrapper.value 
End Function