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

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

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

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

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

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

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

 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" 

наслаждаться

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

С помощью

 Dim myarray As Variant 

работает, но

 Dim myarray As String 

не так, я согласен с Вариантом

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

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

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

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

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

или

 Dim arrWsNames() As String 

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

  • Java - генерировать случайный диапазон конкретных чисел без дублирования этих чисел - как?
  • Что такое разложение массива?
  • Как инициализировать массив до 0 в C?
  • Количество экземпляров Java в каждом массиве в массиве
  • Как определить размер моего массива в C?
  • В Perl существует встроенный способ сравнения двух массивов для равенства?
  • Массивы - это указатели?
  • Массивы с концевыми запятыми внутри инициализатора массива в Java
  • Удалить элемент из массива и массива сокращения
  • Медиана из 5 отсортированных массивов
  • Java: как преобразовать HashMap в массив
  • Давайте будем гением компьютера.