- 日時: 2011/04/05 11:34
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[基本コード][][] * * キーワード:関数,プロシージャ,戻り値,,, * ***********************************************************************************
----------------------------------------------------------------------------------- Re^2: 動的配列を返すプロシージャについて - 魔界の仮面弁士 2003/01/25-16:20 No.2426 -----------------------------------------------------------------------------------
> ちなみに戻り値をString()にするとエラー出る、とのことですがVB6.0では問題なく動いています。 配列を戻り値として返せるようになったのは、VB6からなのです。(^^; http://www.asia.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/vbcon98/vbmscwhatsnewinlanguagefeaturesvb98.htm
> もしダメそうならnanashiさんの意見通り、戻り値をVariant型で指定してみてください。 そうですね。VB5では、戻り値をVariantにして対処する方法が、一般的だと思います。 Variant型には、配列を格納する事ができますので、今回のような「String配列」を 返すような目的には充分でしょう。
ただし、この方法で返せる配列は、「Variantに格納できるデータ型の配列」に限られます。
StringやLongなどの配列であれば問題はないのですが、VB5のユーザー定義型の場合は、 Variantに格納することができませんので、VB6でいうところの
Option Explicit Public Type TEST aa As Long End Type Public Function Proc() As TEST() Dim a(1) As TEST a(0).aa = 123 a(1).aa = 456 Proc = a End Function Private Sub Main() Dim T() As TEST T = Proc() Debug.Print T(0).aa + T(1).aa End Sub
というコードを、 Public Function Proc() As Variant Dim a(1) As TEST a(0).aa = 123 a(1).aa = 456 Proc = a End Function のようにして対処する事は、残念ながらできません。
このような場合は、戻り値のかわりに引数を使って 渡すようにする事で、一応は対処する事ができます。
Public Sub Proc(ByRef a() As TEST) ReDim a(1) a(0).aa = 123 a(1).aa = 456 End Sub Private Sub Main() Dim T() As TEST Call Proc(T) Debug.Print T(0).aa + T(1).aa End Sub
|