将数组传递给函数将返回“编译错误: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