在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
需要括号而不是String
types。
它会这样工作:
Dim arrWsNames() As String = {"value1", "value2"}
通过暗示数组中有两个元素, value1
和value2
这个数组是两个元素长:IE元素elementO = "value1"
element1 = "value2"
要么
Dim arrWsNames() As String
工作正常,没有大小的暗示,你可以用尽可能多的元素来填充它,只要你喜欢。