Объявлять и инициализировать строковый массив в VBA

Это должно работать согласно другому сообщению, но его нет:

Dim arrWsNames As String() = {"Value1", "Value2"}

Кто-нибудь может сообщить мне, что не так?

Ответы

Ответ 1

Попробуйте следующее:

Dim myarray As Variant
myarray = Array("Cat", "Dog", "Rabbit")

Ответ 2

В конкретном случае массива String вы можете инициализировать массив с помощью Split Function, поскольку он возвращает массив String, а не массив Variant:

Dim arrWsNames() As String
arrWsNames = Split("Value1,Value2,Value3", ",")

Это позволяет избежать использования типа данных Variant и сохранить желаемый тип для arrWsNames.

Ответ 3

Проблема заключается в том, что длина вашего массива undefined, и это путает VBA, если массив явно определен как строка. Варианты, однако, кажутся способными изменять размер по мере необходимости (потому что они свистят кучу памяти, и люди обычно избегают их по целому ряду причин).

Следующий код работает просто отлично, но он немного ручной по сравнению с некоторыми другими языками:

Dim SomeArray(3) As String

SomeArray(0) = "Zero"
SomeArray(1) = "One"
SomeArray(2) = "Two"
SomeArray(3) = "Three"

Ответ 4

Dim myStringArray() As String
*code*
redim myStringArray(size_of_your_array)

Затем вы можете сделать что-то статическое, как это:

myStringArray = { item_1, item_2, ... }

Или что-то итеративное:

Dim x
For x = 0 To size_of_your_array
    myStringArray(x) = data_source(x).Name
Next x

Ответ 5

Public Function _
CreateTextArrayFromSourceTexts(ParamArray SourceTexts() As Variant) As String()

    ReDim TargetTextArray(0 To UBound(SourceTexts)) As String

    For SourceTextsCellNumber = 0 To UBound(SourceTexts)
        TargetTextArray(SourceTextsCellNumber) = SourceTexts(SourceTextsCellNumber)
    Next SourceTextsCellNumber

    CreateTextArrayFromSourceTexts = TargetTextArray
End Function

Пример:

Dim TT() As String
TT = CreateTextArrayFromSourceTexts("hi", "bye", "hi", "bcd", "bYe")

результат:

TT(0)="hi"
TT(1)="bye"
TT(2)="hi"
TT(3)="bcd"
TT(4)="bYe"

пользоваться

изменить: я удалил функцию удаления дубликатов текста и уменьшил и упростил код.

Ответ 6

Использование

Dim myarray As Variant

работает, но

Dim myarray As String

не так, я привязываюсь к варианту

Ответ 7

Dim arrWsNames As String() = {"Value1", "Value2"}

Неверно, потому что имя массива arrWsNames требует скобки, а не тип String.

Он будет работать следующим образом:

Dim arrWsNames() As String = {"value1", "value2"}

Предполагая, что в массиве есть два элемента, value1 и value2 этот массив состоит из двух элементов: I.E. elementO = "value1" element1 = "value2"

или

Dim arrWsNames() As String

отлично работает без подразумеваемого размера, вы можете заполнить его как можно большим количеством элементов.