Тема: Передача динамического массива в функцию

Добрый день, господа!
Подскажите, пожалуйста, как передать в функцию динамический массив объектов?

…
Dim c As st_Class
Dim mylines() As AcadLine
c.SetLines mylines
…
/--------------------/
[i]В описании класса:[/i]
Public Sub SetLines(eLines() As AcadLine)
[i]'здесь кода еще нет, просто даже не передается массив! :([/i]
End Sub 

Вылезает знакомая ошибка "91: Object variable or With block variable not set"
Помогите решить проблему, пожалуйста!

Re: Передача динамического массива в функцию

Sub test1()
ReDim myArray(2) As Integer
myArray(0) = 1
myArray(1) = 2
myArray(2) = 3
Call test2(myArray())
End Sub
Function test2(myArray() As Integer)
Debug.Print myArray(1) ' если передаст immediate получишь значение 2
End Function

Re: Передача динамического массива в функцию

Массив можно передвать в функцию или процедуру несколькими способами:
1) через глобальную переменную
2) через переменную типа variant
вот пример 2 варианта :

Dim mylines() As AcadLine
Dim VarArr    as Variant
Dim ArrCnt    as long
...
   VarArr = mylines
   ArrCnt = UBound(mylines())
   Call Test (VarArr, ArrCnt)
...
sub Test (VarArr as Variant, ArrCnt as long)
   dim TmpLine as AcadLine
   set tmpLine = VarArr(0)
   ...
end if

Re: Передача динамического массива в функцию

Большое спасибо за ответы!

> Игорь
c integer'ами проблем обычно нет, у меня AcDbLine()...

> Михаил
Понял, конечно можно и так, правда это более "багоемкое" решение. )
Не понимаю только в моем коде где принципиальная ошибка? Это уже не возможно в VBA получается?
Ответте, гуру! )

Re: Передача динамического массива в функцию

это метод а не Ctrl+C Ctrl+V smile

Re: Передача динамического массива в функцию

Обнаружил интересную вещь! Допустим есть процедура:

Sub test(lines() As AcadLine)
myMsg lines(0).Length
End Sub

Если ее вызвать в том же модуле:

…
sset.SelectOnScreen
ReDim mylines(sset.count - 1) As AcadLine
For i = 0 To sset.count - 1
    Set mylines(i) = sset(i)
Next i
test mylines

, то все ок.
Если тоже самое описание функции отправить в определение класса и вызвать:

Dim c As st_MyClass
c.test mylines

, то возникает вышеуказанная ошибка…
Видимо, это такой баг...