Arrays 如何让VBA子例程调用将数组传递给子例程中另一个函数的函数

Arrays 如何让VBA子例程调用将数组传递给子例程中另一个函数的函数,arrays,vba,syntax,sanity-check,Arrays,Vba,Syntax,Sanity Check,我试图让我的VBA子例程运行一个函数,该函数创建一个数组,然后将该数组传递给另一个函数,该函数将进一步处理这些数组项。我制作了一个非常简单的示例,其功能与我的实际代码完全相同。详情如下: Sub SubRoutine() ProcessArray CreateArray End Sub Function ProcessArray(Arr() As Variant) As Variant End Function Function CreateArray() As Variant Dim Arra

我试图让我的VBA子例程运行一个函数,该函数创建一个数组,然后将该数组传递给另一个函数,该函数将进一步处理这些数组项。我制作了一个非常简单的示例,其功能与我的实际代码完全相同。详情如下:

Sub SubRoutine()
ProcessArray CreateArray
End Sub
Function ProcessArray(Arr() As Variant) As Variant
End Function
Function CreateArray() As Variant
Dim Array1(1 To 4) As Variant
CreateArray = Array1
End Function
这只是两个函数和调用这两个函数的子程序。编译器拒绝编译我的代码,并向我解释:

编译错误:

类型不匹配:应为数组或用户定义的类型

我只能说,所有的数据类型都是相同的,传递的参数实际上是一个数组。以防万一,您可能会想,是的,我尝试过使用一个已分配数据的数组

我知道我在VBA语法中缺少了一些微妙的东西,但我还没有见过这样的例子。如果您有任何见解,我们将不胜感激。

请更改此行:
函数ProcessArray(Arr()作为变量)作为变量

对此:
函数ProcessArray(Arr作为变量)作为变量


这样,您的函数现在将接受包含数组的变量,而不是查找变量数组。正如你所说,这是一个微妙但重要的区别。

我认为仍然没有得到答案的是原因
一,<代码>MySub(MyArg)

很好,但是
二,<代码>MyOtherSub(MyArg1、MyArg2)

基本上,您可以将通常为byref的参数作为byval传递:
调用MySub(Arg1,(Arg2))'Arg1由ref传递,Arg2由val传递

代码#1。之所以有效,是因为VBA认为您正在通过VAL传递一个参数,因此在没有
call
关键字的
Sub
调用中,它不算作括号。如其他答案所述,在没有
call
关键字的
Sub
调用中不允许使用括号

Call
关键字需要括号中的参数。因此,使用
Call
关键字
callmysub(MyArg)
实际上会传递
MyArg
byRef,因为括号用作参数的附件


代码#2不起作用,因为没有有效的方法来证明语法中的括号(只允许使用Call关键字)。

Daniel,如果我是小妞,我会生你的孩子。这让我发疯。Anyt提示让函数返回字符串数组而不会出现类型不匹配错误(以下示例):函数CreateArray()作为字符串()Dim Array1(1到4)作为字符串CreateArray=Array1 EndFunction@user1902208.该代码段不会返回错误。您只需将其像
dim x()一样调用为string:x=CreateArray