我在这里需要帮助来了解变量Ret如何以及从何处具有值“2”。
我无法理解此代码,有人可以帮助我。
Function Test(ByVal Input1 As Integer, ByVal Input2 As Integer, _
ByRef Output1 As Integer, ByRef Output2 As Integer) As Integer
Output1 = Input1 + Input2
Output2 = Input1 - Input2
Test = Output1 + Output2
End Function
Sub Test2()
Dim Ret As Integer, Input1 As Integer, Input2 As Integer, _
Output1 As Integer, Output2 As Integer
Input1 = 1
Input2 = 2
Ret = Test(Input1, Input2, Output1, Output2)
Sheet1.Range("A1") = Ret ' 2
Sheet1.Range("A2") = Output1 ' 3
Sheet1.Range("A3") = Output2 '-1
End Sub
答案 0 :(得分:1)
返回值
VBA中的返回值是通过将函数名称设置为值来完成的。例如:
Function myFunction()
myFunction = 123
End Function
当我调用myFunction
时,我可以将函数的返回值赋给变量,例如像:
returnValue = myFunction
returnValue
现在的值为123
在您的示例中,函数Test返回Output1 + Output2
:
Output1 + Output2 = 3 + (-1) = 2
因此,函数Test返回值2
ByRef / ByVal参数
这里发生的另一件事是两种不同类型的参数。
传递参数 ByVal
(按值)会创建变量的副本并将该副本传递给函数。因此,如果我调整函数内部的变量,它在调用函数中的值不会改变。例如:
Function MyFunction(ByVal num)
num = 2
End Function
然后我像这样调用函数:
count = 1
Call MyFunction(count)
MsgBox count
MsgBox将显示数字1.变量count
被复制到另一个变量(MyFunction内的num
),当num
被赋值为2时,count
保持不变。
传递参数 ByRef
是相反的:参数不会被复制,而是直接(作为参考〜作为“链接”)传递给函数。
让我们再看一下上面的MyFunction,但想象一下将参数更改为ByRef而不是ByVal。在这种情况下,MsgBox count
将显示值2.当我们将count
ByRef传递给MyFunction时,num
将成为与count
相同的变量的别名,并且{{1} }}被赋值为2,num
是同一个变量,因此它现在也具有值2.
答案 1 :(得分:0)
Ret
获取Test
函数
Ret = Test(Input1, Input2, Output1, Output2)