VBA从数组数组中提取数组

时间:2018-07-12 18:09:58

标签: arrays excel string vba

我有许多数组,其中有不同的字符串,例如

array1() = Array("one","two","three")
array2() = Array("siz","help")

我将字符串组合成字符串数组的数组

bigArray() = Array(array1(),array2(),...)

For k = 0 To # in bigArray
    reason = causes(xValue, bigArray(k))
Next

但是当我尝试将其传递给函数时,在bigArray(k)出现错误

Public Function causes(xValue As String, keyWords() As Variant) As String

1 个答案:

答案 0 :(得分:3)

作业左侧的空括号多余且令人困惑,请将其删除。

我假设bigArray就是这样声明的,

Dim bigArray [As Variant]
  

如果未声明,请在模块顶部指定Option Explicit总是!),并声明您正在使用的每个变量-否则,您将允许VBA编译愉快并输入错字,这不可避免地会变成令人尴尬,难以发现的错误,甚至可能在堆栈溢出中重复出现问题。

Variant可以容纳任何东西,包括数组或锯齿状的数组(即数组的数组)。

尽管keywords参数...

Public Function causes(xValue As String, keyWords() As Variant) As String

被声明为一个数组,其中每个元素都是一个变体。尽管variant元素确实可以是数组,但是当您将数组作为参数传递时,却无法说“每个元素都是variant元素的一个数组”,因此您将拥有很多如果仅将其包装在Variant中(然后在要查看数组的时候 assert ),则更容易:

Public Function causes(xValue As String, keyWords As Variant) As String
    Debug.Assert IsArray(keyWords)
    Debug.Assert IsArray(keyWords(LBound(keyWords))

您的For循环假定下界是什么:

 For k = 0 To # in bigArray

不做任何假设的循环将是:

For k = LBound(bigArray) To UBound(bigArray)