在VBA中声明和初始化string数组

这应该根据另一个堆栈溢出post,但不是:

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数据types,并为arrWsNames保留所需的types。

这里的问题是数组的长度是未定义的,如果将数组显式定义为string,则会混淆VBA。 然而,变体似乎可以根据需要resize(因为它们会占用大量的内存,而人们通常会因为一些原因而避免这些内存)。

下面的代码工作得很好,但是与其他一些语言相比,它有点手动:

 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" 

请享用

编辑:我删除了duplicatedtexts删除function,使代码更小,更容易使用。

运用

 Dim myarray As Variant 

工作但是

 Dim myarray As String 

不,所以我坐在Variant上

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

错误,因为数组名称arrWsNames需要括号而不是Stringtypes。

它会这样工作:

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

通过暗示数组中有两个元素, value1value2这个数组是两个元素长:IE元素elementO = "value1" element1 = "value2"

要么

 Dim arrWsNames() As String 

工作正常,没有大小的暗示,你可以用尽可能多的元素来填充它,只要你喜欢。