2015-07-02 3 views
0

Я пытаюсь написать функцию в более крупном макросе, чтобы вернуть список элементов. Массив формируется из ячеек в электронной таблице:Как вернуть массив переменной длины из функции 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 равного массив элементов он заканчивает функцию без Elem_Array ничего сравнявшись. Когда я вызываю функцию, у меня заканчиваются ошибки, потому что я пытаюсь вызвать пустой массив или строку. Я пробовал использовать цикл for для заполнения Elem_Array по одному элементу за раз, но функция заканчивается без добавления чего-либо. Является ли Elements() Dim'ed как Variant или string, ничего не меняет для меня. Предложения по подобным вопросам включают использование коллекции для Elements(), а затем использование цикла, чтобы Elem_Array равнялся элементам, но, если это возможно, я хотел бы свести к минимуму изменение кода. Любая помощь приветствуется!

ответ

1

Изменить это:

Dim Elements() As Variant 

Для этого:

Dim Elements As Variant 

.

Первый оператор создает массив вариантов

Ваша функция возвращает тип «вариант переменной» (в единственном числе) не массив вариантов

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