Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在VBA中将数组传递给函数_Arrays_Vba - Fatal编程技术网

Arrays 在VBA中将数组传递给函数

Arrays 在VBA中将数组传递给函数,arrays,vba,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 "

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

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)

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


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

将数组参数从变量数组更改为变量数组

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

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

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

我使用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

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

我使用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

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

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

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

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

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

Array()
函数不返回Variant()的数组,而是返回子类型数组的变体,这就是为什么会出现类型不匹配错误的原因。
Array()
函数不返回Variant()的数组,而是返回子类型数组的变体,这就是为什么会出现类型不匹配错误的原因。如果您只是复制他的第一个代码,它会工作,但是如果您按照他编写的方式内联对数组的调用,您将得到一个错误。如果您只是复制他的第一个代码,它会工作,但是如果您按照他编写的方式内联对数组的调用,您将得到一个错误。