2016-05-10 1 views
1

У меня ужасная проблема. Я создал чудовищные классы со многими свойствами, среди которых есть свойства массива.callbyname работает с элементом массива as 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 хотел бы добавить массив в свойство массива, которое еще пустое, и для этой цели Id нравится использовать callbyname. так что мне нужен только vblet, я вообще не буду запускать какой-либо sub :), я искал его везде, пока нет решения и, возможно, нет никакого решения. снова мы находимся на пределе vba :( – viktorajosagos

+0

Извините, я неправильно понял проблему, удалил мой предыдущий комментарий. Это новый: если то, что вы хотите сделать, не работает со встроенным 'CallByName', вам нужно напишите свой собственный, который работает с ограничениями. Там вы можете перебрать массив и явно вызывать свои свойства по одному для каждой записи. – Leviathan

+0

Вы должны использовать typelib, как указано здесь http://www.vbforums.com/showthread. php? 405366-RESOLVED-Using-CallByName-with-variable-number-of-arguments – 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

Послушайте, спасибо, Тим, кажется, многообещающий :) – viktorajosagos

 Смежные вопросы

  • Нет связанных вопросов^_^