在VBA中声明和初始化字符串数组

时间:2013-10-14 20:54:21

标签: arrays vba initialization

这应该根据另一个堆栈溢出帖子工作但不是:

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

谁能告诉我什么是错的?

7 个答案:

答案 0 :(得分:155)

试试这个:

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

答案 1 :(得分:121)

在String数组的特定情况下,您可以使用Split Function初始化数组,因为它返回String数组而不是Variant数组:

Dim arrWsNames() As String
arrWsNames = Split("Value1,Value2,Value3", ",")

这允许您避免使用Variant数据类型并为arrWsNames保留所需的类型。

答案 2 :(得分:20)

这里的问题是数组的长度是未定义的,如果数组被明确定义为字符串,这会混淆VBA。然而,变体似乎能够根据需要调整大小(因为它们占用了大量内存,人们通常会因为一系列原因而避免使用它们。)

以下代码工作正常,但与其他一些语言相比,它有点手册:

Dim SomeArray(3) As String

SomeArray(0) = "Zero"
SomeArray(1) = "One"
SomeArray(2) = "Two"
SomeArray(3) = "Three"

答案 3 :(得分:3)

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

答案 4 :(得分:2)

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删除功能,使代码更小,更容易使用。

答案 5 :(得分:0)

唯一需要的函数,其工作方式与 array() 类似,但提供字符串类型。您必须先将数组变暗为字符串,如下所示:

Sub UseStringArray()

    Dim sample() As String
    sample = StringArray("dog", "cat", "horse")

End Sub

Function StringArray(ParamArray ArgList())

    ReDim tempArray(UBound(ArgList)) As String
    For i = 0 To UBound(ArgList)
        tempArray(i) = ArgList(i)
    Next
    StringArray = tempArray

End Function

答案 6 :(得分:-7)

使用

Dim myarray As Variant

有效但

Dim myarray As String

不是,所以我坚持使用Variant