クラスから取得した配列でJoinエラー

解決


まさお  2008-05-08 11:44:40  No: 100688  IP: 192.*.*.*

まさお と申します。  宜しくお願い致します。

  WinXP Pro SP1 VB6 SP6 です。

  下記コードで※部で「ErrNum=5, プロシージャの呼び出し、または引数が
不正です。」エラーが発生します。
  クラスから配列変数の取得の仕方が悪いのだと思いますが修正方法が判り
ません。
  ご教授戴きたくお願い致します。

Public Sub Main()
    Dim ClaTest As ClassTest:   Set ClaTest = New ClassTest
    Dim i As Long, s As String, v As Variant

    For i = 0 To 10
        Call ClaTest.AddMyArray(i)
    Next
    
    For Each v In ClaTest.MyArray
        Debug.Print v   '←OK
    Next
    
    s = Join(ClaTest.MyArray, ",")  '※
        '↑ErrNum=5, プロシージャの呼び出し、または引数が不正です。
    MsgBox s
    
    Set ClaTest = Nothing
End Sub

******ClassTest モジュール******
Option Explicit

Private mvarMyArray() As Long 'ローカル コピー

Public Property Get MyArray() As Variant
    MyArray = mvarMyArray
End Property

Public Function AddMyArray(ByVal vData As Long)
    Dim lngUbound   As Long
    
    lngUbound = -1
    On Error Resume Next
        lngUbound = UBound(mvarMyArray) + 1
    On Error GoTo 0
    
    If lngUbound = -1 Then
        ReDim mvarMyArray(0)
        mvarMyArray(0) = vData
    Else
        ReDim Preserve mvarMyArray(lngUbound)
        mvarMyArray(lngUbound) = vData
    End If
End Function
以上**ClassTest モジュール******

編集 削除
魔界の仮面弁士  2008-05-08 12:36:20  No: 100689  IP: 192.*.*.*

> s = Join(ClaTest.MyArray, ",")  '※
> '↑ErrNum=5, プロシージャの呼び出し、または引数が不正です。

Debug.Print TypeName(ClaTest.MyArray)
が、"Long()" を返している事に注意してください。

Join に渡すことができるのは、String() または Variant() です。

編集 削除
まさお  2008-05-08 12:45:41  No: 100690  IP: 192.*.*.*

魔界の仮面弁士 さん、ありがとうございました。

> Join に渡すことができるのは、String() または Variant() です。

  ワッ!  知りませんでした。

    Dim MyArray(10) As Long
    For i = 0 To 10: MyArray(i) = i: Next
    s = Join(MyArray, ",")

  同じエラーが発生しました。
  そうだったのですネ。

  ありがとうございました。

編集 削除