2016-05-10 4 views
1

私はひどい問題があります。私は多くのプロパティを持つ巨大クラスを構築しました。その中に配列プロパティもあります。callbynameはprocnameとして配列要素を扱います

私は、CALLBYNAME、その文句を言わない作業でこれらを参照したいと私たちは例を見てみましょうかどう:

public sub whatsoever() 

    Dim alfaarray() As Variant 

    Dim g As Integer 

    Dim obj As Object 

    ReDim alfaarray(4) 

    Set obj = New teszt 

    For g = 0 To 4 
    alfaarray(g) = "g" & CStr(g) 
    Next g 

    Call obj.init 

    CallByName obj, "GARG", VbLet, alfaarray 

end sub 

クラス:teszt

Dim pgarg() As String 

Property Let GARG(index As Long, value As String) 
pgarg(index) = value 
End Property 

Property Get GARG(index As Long) As String 
GARG = pgarg(index) 
End Property 

Public Sub init() 
    ReDim pgarg(4) 

End Sub 
+0

親愛なるMAts、ありがとう、私は明確ではなかった:Idは空の配列プロパティに配列を追加するのが好きで、この目的のためにはcallbynameを使いたい。だから私はvbletしか必要としません。私はサブを実行しません:)とにかく、私はどこでもそれを探しました。これまでのところ解決策はなく、まったく解決策がないかもしれません。もう一度私たちはvbaの限界にいます:( – viktorajosagos

+0

申し訳ありませんが、私はこの問題を誤解していました;私の前のコメントを削除しました:これは新しいものです:あなたがしたいことがビルトインの 'CallByName'制限を回避する独自のコードを書くことができます。ここで配列をループし、各エントリごとに明示的にプロパティを呼び出すことができます。 – Leviathan

+0

http://www.vbforums.com/showthreadに記載されているtypelibを使用する必要があります。 php?405366 - 解決済み - CallByName-with-variable-number-of-with引数 – Jules

答えて

0

あなたGARGプロパティレッツは、インデックスを受け入れ、文字列:代わりに配列全体を渡すことはできません

Public Sub whatsoever() 

    Dim g As Long 
    Dim obj As Object 

    Set obj = New teszt 
    obj.init 

    For g = 0 To 4 
     CallByName obj, "GARG", VbLet, g, "g_" & CStr(g) 
    Next g 

    Debug.Print obj.GARG(0) '>> g_0 
    Debug.Print obj.GARG(1) '>> g_1 

End Sub 
+0

悪い試してみてくださいTim、これは有望なようです:) – viktorajosagos

関連する問題