2016-05-10 6 views
1

Ich habe ein schreckliches Problem. Ich habe monströse Klassen mit vielen Eigenschaften aufgebaut, unter denen es auch Array-Eigenschaften gibt.callbyname arbeitet mit Array-Element als procname

, wenn ich diese mit CallByName bezeichnen möchten, es wird nicht funktionieren, lassen Sie uns ein Beispiel sehen:

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 

Klasse: 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

Sehr geehrte MAts, Vielen Dank, ich war nicht klar: Ich möchte ein Array zu einer Array-Eigenschaft hinzufügen, die noch leer ist und zu diesem Zweck möchte ich callbyname verwenden. also brauche ich nur vblet, ich werde keinen sub :) laufen lassen, ich habe es überall gesucht, es gibt bisher keine lösung und vielleicht gibt es überhaupt keine lösung. wieder sind wir an den Grenzen von vba :( – viktorajosagos

+0

Sorry, ich missverstanden das Problem; löschte meinen vorherigen Kommentar. Dies ist der neue: Wenn was Sie tun möchten, funktioniert nicht mit dem eingebauten 'CallByName' müssen Sie schreibe deine eigene, die um die Einschränkungen herum funktioniert, dort kannst du das Array durchlaufen und deine Eigenschaften explizit für jeden Eintrag aufrufen – Leviathan

+0

Du musst typelib wie hier erwähnt verwenden http://www.vbforums.com/showthread. php? 405366-RESOLVED-Using-CallByName-with-variable-Anzahl-von-Argumenten – Jules

Antwort

0

Ihre GARG Mietgegenstands akzeptiert einen Index und eine Zeichenkette: Sie können stattdessen nicht ein ganzes Array übergeben

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

Ill versuchen es dank Tim, es scheint vielversprechend :) – viktorajosagos

Verwandte Themen