我有许多数组,其中有不同的字符串,例如
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
答案 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)