Ответ 1
Попробуйте следующее:
Dim myarray As Variant
myarray = Array("Cat", "Dog", "Rabbit")
Это должно работать согласно другому сообщению, но его нет:
Dim arrWsNames As String() = {"Value1", "Value2"}
Кто-нибудь может сообщить мне, что не так?
Попробуйте следующее:
Dim myarray As Variant
myarray = Array("Cat", "Dog", "Rabbit")
В конкретном случае массива String вы можете инициализировать массив с помощью Split Function, поскольку он возвращает массив String, а не массив Variant:
Dim arrWsNames() As String
arrWsNames = Split("Value1,Value2,Value3", ",")
Это позволяет избежать использования типа данных Variant и сохранить желаемый тип для arrWsNames.
Проблема заключается в том, что длина вашего массива undefined, и это путает 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
этот массив состоит из двух элементов: I.E. elementO = "value1"
element1 = "value2"
или
Dim arrWsNames() As String
отлично работает без подразумеваемого размера, вы можете заполнить его как можно большим количеством элементов.