Как да върнете масив с различна дължина от VBA функция

Опитвам се да напиша функция в рамките на по-голям макрос, за да върна списък от елементи. Масивът се генерира от клетки в електронната таблица:

    Function Elem_Array() As Variant
    Dim Elements() As Variant
    i = 1
    Cells(i, 38).Select
    element1 = Cells(i, 38).Value
    element2 = ""

    Do While element2 <> element1
    i = i + 1
    Cells(i, 38).Select
    element2 = Cells(i, 38).Value
    ReDim Preserve Elements(1 To i)
    Elements(i) = element2
    Loop

    Elements(1) = element1
    Elem_Array= Elements
    End Function

Когато се опитвате да зададете Elem_Array равен на масива Elements, той завършва функцията, без Elem_Array да се равнява на нещо. Когато извикам функцията, в крайна сметка получавам грешки, защото се опитвам да извикам празен масив или низ. Опитах се да използвам for цикъл за попълване на Elem_Array един по един елемент, но функцията завършва без добавяне на нищо. Дали Elements() е Dim'ed като вариант или низ не променя нищо за мен. Предложенията за подобни въпроси включват използване на колекция за Elements() и след това използване на цикъл, за да има Elem_Array равен на Elements, но ако е възможно, бих искал да сведа до минимум промяната на кода твърде много. Всяка помощ се оценява!


person Christian Contreras    schedule 02.07.2015    source източник


Отговори (1)


Променете това:

Dim Elements() As Variant

До това:

Dim Elements As Variant

.

Първият израз генерира масив от варианти

Вашият тип връщане на функция е "вариантна променлива" (единствено число), а не масив от варианти

person paul bica    schedule 02.07.2015