Arrays 如何让VBA子例程调用将数组传递给子例程中另一个函数的函数
我试图让我的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
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
。