我有以下子程序打印数组元素:
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
打印整个数组时,它不是,我得到:
编译错误:类型不匹配:预期的数组或用户定义类型。
我做错了什么?
答案 0 :(得分:2)
Variant(可能碰巧包含数组)与Variants数组不同。您需要更改此行:
Dim arr As Variant
到此:
Dim arr() As Variant