Объявить и инициализировать массив строк в 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
прекрасно работает без размера подразумевается, вы можете заполнить его с таким количеством элементов, как вам нравится.