2017-01-05 4 views
1

В приведенном ниже примере синтаксиса, как я могу добавить каждый элемент в новый массив вместо печати? Я не уверен, как это сделать, например, я не знаю размер массива, так как это может быть 0 (нет необходимости когда-либо инициализировать массив), или это может быть Ubound массива, который он итерирует.Динамическое заполнение массива VBA

Option Compare Database 
Option Explicit 

Function TestIt() 
Dim animalarray As Variant, xyz As Variant 
animalarray = Array("Cat", "Cow", "Camel", "Dire Wolf", "Dog", "Coyote", "Rabbit", "Road runner", "Cougar") 

For Each xyz In animalarray 
    If Left(CStr(xyz), 1) = "C" Then 
    Debug.Print CStr(xyz) 
    End If 
Next 

End Function 
+0

Вы хотите добавить в тот же массив, который перебирает на? –

+0

@ A.S.H - нет. Я хочу добавить в новый массив. Извините за то, что вы не поняли это –

ответ

2

Вы можете использовать Redim Preserve:

Sub TestIt() 
    Dim animalArray(): animalArray = Array("Cat", "Cow", "Camel", "Dire Wolf", "Dog", "Coyote", "Rabbit", "Road runner", "Cougar") 
    Dim anotherArray(): anotherArray = Array("Lion", "Tiger", "Leopard") 

    Dim xyz As Variant 
    For Each xyz In animalArray 
     If Left(CStr(xyz), 1) = "C" Then 
     ReDim Preserve anotherArray(UBound(anotherArray) + 1) 
     anotherArray(UBound(anotherArray)) = xyz 
     End If 
    Next 

    For Each xyz In anotherArray 
     Debug.Print xyz 
    Next 
End Sub 
+0

С этим для моего синтаксиса для работы по мере необходимости я должен был добавить дополнительный оператор If к блоку For Each с помощью anotherArray, поскольку в массив были добавлены элементы, которые не соответствовали критериям «C». Поэтому, чтобы удалить те, которые повторяются в блоке For Each, я добавил второй оператор If Left (...), чтобы устранить их обработку. –

+0

@MichaelMormon Вы можете легко запустить код с пустым 'anotherArray': просто' Dim anotherArray() '. Как я понял ваш вопрос, вам нужен общий механизм для динамического добавления элементов в массив. Я думал, что заявление 'Debug.Print' было просто для иллюстрации. Если конечной целью было действительно напечатать те имена, начинающиеся с« C », нет необходимости в другом массиве вообще. –

+0

Я имею в виду 'Dim anotherArray(): anotherArray = Array()' –

1

Это даже проще:

Function TestIt() 

    Dim animalarray As Variant 
    Dim newarray As Variant 
    Dim xyz As Variant 

    animalarray = Array("Cat", "Cow", "Camel", "Dire Wolf", "Dog", "Coyote", "Rabbit", "Road runner", "Cougar") 
    newarray = animalarray 

    For Each xyz In newarray 
     If Left(CStr(xyz), 1) = "C" Then 
      Debug.Print CStr(xyz) 
     End If 
    Next 

End Function 
+0

Это очень просто, спасибо за это! Я никогда не могу получить синтаксис «ReDim Preserve» точно так, как раз то, что испортило мой синтаксис каждый раз. В этом случае нет необходимости! –

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