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

次に、2 つの関数を作成しました。

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 に答える