将数组传递给函数将返回“编译错误:types不匹配:数组或预期的用户定义types”

我有以下子程序打印数组元素:

Sub printArray(arr() As Variant) Dim i, lowerBound, upperBound As Integer lowerBound = LBound(arr) upperBound = UBound(arr) MsgBox "lowerBound: " & lowerBound MsgBox "upperBound: " & upperBound For i = lowerBound To upperBound MsgBox i & " : " & arr(i) Next i End Sub 

这是按预期工作,我用以下方式调用它:

 Sub callPrintArray() Dim arr(3) As Variant arr(0) = "John" arr(1) = "Star" arr(2) = #6/30/2010# ' Hire Date ' PRINTS ONE EXTRA ELEMENT WITHOUT THIS LINE ' Dim arr(3) As Variant MEANS INDEXING FROM 0 TO 2 arr(3) = "LAST" Call printArray(arr) End Sub 

然后我有函数返回现有的表格作为数组:

 Function getListOfSheetsW() As Variant Dim i As Integer Dim sheetNames() As Variant ReDim sheetNames(1 To Sheets.Count) For i = 1 To Sheets.Count sheetNames(i) = Sheets(i).Name Next i getListOfSheetsW = sheetNames End Function 

我想用所提到的子程序printArray打印这个函数返回的工作表。 我试过了:

 Sub callGetListOfSheetsW() Dim arr As Variant arr = getListOfSheetsW() ' Working MsgBox arr(1) MsgBox arr(2) ' Does not working ' Call printArray(arr) End Sub 

当我打印特定的元素,它正在工作,但是当我想打印整个数组使用printArray它不是,我得到:

编译错误:types不匹配:数组或预期的用户定义types。

我做错了什么?

Variant(可能碰巧包含数组)与Variant数组不一样。 你需要改变这一行:

 Dim arr As Variant 

对此:

 Dim arr() As Variant