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


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

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

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

7 97

7 ответов:

попробуйте это:

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

в конкретном случае строкового массива можно инициализировать массив с помощью Разделить Функции поскольку он возвращает массив строк, а не массив вариантов:

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

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

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

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

Dim SomeArray(3) As String

SomeArray(0) = "Zero"
SomeArray(1) = "One"
SomeArray(2) = "Two"
SomeArray(3) = "Three"
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
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"

наслаждайтесь

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

используя

Dim myarray As Variant

работает, а

Dim myarray As String

не так я сижу к варианту

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

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

это будет работать так:

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

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

или

Dim arrWsNames() As String

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