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

时间:2015-10-29 14:42:30

标签: excel vba excel-vba

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

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打印整个数组时,它不是,我得到:

  

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

我做错了什么?

1 个答案:

答案 0 :(得分:2)

Variant(可能碰巧包含数组)与Variants数组不同。您需要更改此行:

Dim arr As Variant

到此:

Dim arr() As Variant