这应该根据另一个堆栈溢出帖子起作用,但它不是:
Dim arrWsNames As String() = {"Value1", "Value2"}
谁能让我知道出了什么问题?
这应该根据另一个堆栈溢出帖子起作用,但它不是:
Dim arrWsNames As String() = {"Value1", "Value2"}
谁能让我知道出了什么问题?
尝试这个:
Dim myarray As Variant
myarray = Array("Cat", "Dog", "Rabbit")
在字符串数组的特定情况下,您可以使用拆分函数初始化数组,因为它返回字符串数组而不是变体数组:
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"
享受!
编辑: 我删除了重复文本删除功能,并使代码更小更易于使用。
一个唯一需要的函数,它的工作方式与 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
使用
Dim myarray As Variant
有效,但
Dim myarray As String
不是这样我就可以使用 Variant