1

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

我创建了一个名为 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!”。我究竟做错了什么?这可能吗?

4

2 回答 2

0

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

这可能吗?

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

试试这个:

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

    w.value = iValue

    square = w.value * w.value
End Function

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

于 2012-09-04T00:35:30.253 回答
-1

参数名称无效:“Wrapper”已经是一个类的名称。

尝试这个:

Function square(MyWrapper As wrapper) As Integer   
    square = MyWrapper.value * MyWrapper.value 
End Function
于 2012-09-03T17:30:03.640 回答