Объявить и инициализировать массив строк в VBA
Это должно работать в соответствии с другим сообщением переполнения стека, но его нет:
Dim arrWsNames As String() = {"Value1", "Value2"}
может кто-нибудь дать мне знать, что случилось?
7 ответов:
в конкретном случае строкового массива можно инициализировать массив с помощью Разделить Функции поскольку он возвращает массив строк, а не массив вариантов:
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 arrWsNames As String() = {"Value1", "Value2"}неправильно, потому что имя массива
arrWsNamesнужна скобка, а не типString.это будет работать так:
Dim arrWsNames() As String = {"value1", "value2"}подразумевая, что массив имеет два элемента в нем,
value1иvalue2этот массив состоит из двух элементов длиной: т. е.elementO = "value1"element1 = "value2"или
Dim arrWsNames() As Stringпрекрасно работает без размера подразумевается, вы можете заполнить его с таким количеством элементов, как вам нравится.