将数组传递给VBA中的函数

时间:2016-02-16 17:05:21

标签: arrays vba

我有一个接受数组的过程。因此我可以传递一个数组:

Public Sub MySub (Something as String, ByRef Arr() as Variant)
  'Stuff
End Sub


Public Sub Test()

   Dim Columns() As Variant
   Columns = Array(1, 2, 3, 4, 5, 6)

   MySub "sth", Columns

End Sub

问题在于,当我想像

那样内联时
MySub "sth", Array(1, 2, 3, 4, 5, 6)

MySub "sth", Cvar(Array(1, 2, 3, 4, 5, 6))

我收到一个编译错误,说明类型不匹配:数组或用户定义的类型。

如何将内联数组传递给函数?

3 个答案:

答案 0 :(得分:2)

我使用Excel 2013来运行您的VBA代码,并且没有类型不匹配错误。 例如,使用sub:

Public Sub MySub(Something As String, ByRef Arr() As Variant)
    For i = 0 To UBound(Arr)
        Debug.Print Arr(i)
        Next i
    End
End Sub

我在即时窗口中打印出1,2,3,4,5,6个数字(Ctrl + G)

答案 1 :(得分:1)

将数组参数从变体数组更改为仅变体

Public Sub MySub(Something As String, ByRef Arr As Variant)
  'Stuff
End Sub


Public Sub Test()

   Dim Columns() As Variant
   Columns = Array(1, 2, 3, 4, 5, 6)

   MySub "sth", Columns
   MySub "sth", Array(1, 2, 3, 4, 5, 6)
   'both worked in my test
End Sub

答案 2 :(得分:0)

在调用语句之前使用关键字 call 并将所有参数放在括号内,如下所示:

call MySub ("sth", Cvar(Array(1, 2, 3, 4, 5, 6)))