150

这应该根据另一个堆栈溢出帖子起作用,但它不是:

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

谁能让我知道出了什么问题?

4

7 回答 7

198

尝试这个:

Dim myarray As Variant
myarray = Array("Cat", "Dog", "Rabbit")
于 2013-10-14T20:57:25.850 回答
167

在字符串数组的特定情况下,您可以使用拆分函数初始化数组,因为它返回字符串数组而不是变体数组:

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

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

于 2014-12-03T10:00:59.500 回答
25

这里的问题是数组的长度是未定义的,如果数组被显式定义为字符串,这会使 VBA 感到困惑。然而,变体似乎能够根据需要调整大小(因为它们占用了大量内存,人们通常出于各种原因避免使用它们)。

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

Dim SomeArray(3) As String

SomeArray(0) = "Zero"
SomeArray(1) = "One"
SomeArray(2) = "Two"
SomeArray(3) = "Three"
于 2015-08-21T18:44:25.180 回答
5
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
于 2016-08-12T21:20:09.607 回答
5
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"

享受!

编辑: 我删除了重复文本删除功能,并使代码更小更易于使用。

于 2016-09-01T17:04:43.153 回答
1

一个唯一需要的函数,它的工作方式与 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
于 2021-06-11T04:08:19.213 回答
-6

使用

Dim myarray As Variant

有效,但

Dim myarray As String

不是这样我就可以使用 Variant

于 2014-06-03T13:49:31.200 回答