4

私はウェブを検索し、ここでスタックオーバーフローの質問を検索しましたが、解決策を見つけることができませんでした.

これが私がやりたいことです:

「MyClass」という名前のクラス モジュールに次のコードがあるとします。


Option Explicit
Dim var1 as integer

Sub Initialize(v as integer) var1 = v End Sub

Function GetVar1() GetVar1 = var1 End Function

次に、コードを含む別のモジュールにUDFがあります

 
Function InitializeMyClass(v as integer) as MyClass
   Dim myvar as MyClass
   Set myvar = new MyClass
   Call myvar.Initialize(v)
   Set InitializeMyClass = myvar
End Function

Function GetMyVar(m as MyClass) GetMyVar = m.GetVar1() End Function

セル A1 には「=InitializeMyClass(3)」があり、セル A2 には「=GetMyVar(A1)」があります。両方のセルで #VALUE エラーが発生します。これはもちろん、ユーザー定義のデータ型をセル A1 に返そうとしているためです。これは可能だと思いますが、方法がわかりません。

編集:そうそう、質問は、「ユーザー定義のデータ型をセルに返し、上記の例で別のUDFから呼び出す方法はありますか?これがCOM が必要かどうか. もしそうなら、誰かが私がどのように開始できるか知っていますか? 理想的には、誰かがこれがどのように機能したかの例を持っていれば、それは素晴らしいことです.

別の編集:さて、それができることがわかりました:この説明を読んでください、それは定量的ではありませんが、彼らが何をしているのかがわかりますhttp://www.quanttools.com/index.php?option= com_content&task=view&id=19

4

3 に答える 3

2

他の回答が示唆するように、あなたの質問に対する文字通りの答えは「いいえ」です。セルには、数値、文字列、ブール値、エラーなど以外は格納できません。これらのような単純な値、配列、または範囲参照以外のものを UDF から返すことはできません。

ただし、正当なセル値 (つまり、「myclass:instance:42」) であるオブジェクトへのある種のハンドルを渡す (およびセルに格納する) ことにより、本質的に必要なことを行うことができます。これはおそらく、編集でリンクした例が行うことです。ただし、コードはハンドル値の意味を解釈し、オブジェクトをメモリ自体に維持できる必要があります。ハンドルを消去または上書きする方法がたくさんあるため、VBA を使用してこれらすべてを実行している場合は検出できません。

今は手元にありませんが、Steve Dalton 著の『Financial Applications using Excel Add-in Development in C/C++』という本をご覧になることをお勧めします。

http://www.amazon.com/Financial-Applications-using-Development-Finance/dp/0470027975/ref=ntt_at_ep_dpt_1

彼は、このようなハンドルを XLL アドインでより確実に操作する方法について説明しています。

于 2009-09-02T00:26:18.387 に答える
1

硬めのクッキーになりそうです。ちょっとばかげていますが、できることは、Initialize 関数で名前 (文字列) を返してから、名前パラメーターを Get 関数に追加することです。基本的に、オブジェクトを直接操作するのではなく、名前の文字列を操作します。

于 2009-08-31T18:03:27.387 に答える
0

UDF の実行が完了するとすぐに myvar が範囲外になるため、ネストは機能しません。実際には、ワークシート関数でオブジェクトを返そうとすることに関連する他の問題が存在する可能性があります (ほとんどの場合存在します)。

オブジェクトへのポインターをセルに格納し、そのポインターを介してオブジェクトを取得できますが、スコープによってオブジェクトが強制終了されます。ポインターからオブジェクトを取得するには、スコープ内に留まる必要があるため、わざわざポインターを保存する必要はありません。

明らかに、実際の状況は例よりも複雑です。したがって、オブジェクトをセルに格納することについては答えはノーですが、何を達成しようとしているのかを説明すれば、別の方法があるかもしれません。

于 2009-08-31T22:19:37.370 に答える