我试图将变量从一个函数传递给另一个函数。
我的第一个想法是使用ByRef声明,我听说它将在Visual Basic中通过引用传递参数。但是,我不清楚如何使用它。现在我有以下代码。
Function number(x As Double) As Double
Dim z As Double
z = 10.5
number = x
End Function
Function triple(ByRef z As Double) As Double
z = z * 3
triple = z
End Function
让我们说A1=2.5
。如果我说B1=number(A1)
那么答案是2.5,我预计它是。然后我说B2=triple(B1)
然后答案是7.5而不是31.5。我不确定为什么它取A1
的值而不是从函数z
中获取变量number
的值。
这是工作表的屏幕截图
提前致谢。
答案 0 :(得分:1)
数字函数中的z在函数返回时消失了。三重功能只会传递通过的数字,2.5倍3这就是你所看到的。 tipple函数不知道z。 共享变量的一种方法是在函数之外声明它们。 Dim z在函数外部为double。 但是如果你传递z作为b1的值是2.5那么你将得到相同的7.5只调用三次,不要传递b1的值
Dim z As Double
Function tripple(x As Double)
' Use the value calculated from first function
tripple = z * 3
End Function
Function number(x As Double)
' Set the global variable
' May be some calculations are done and z is set
z = 10.5
'Return x as in original code
number = x
End Function
答案 1 :(得分:0)
我不得不承认,我对你要做的事情感到很困惑。我最初的想法是做类似这样的事情,这与@dgorti建议的类似,但如果z
从未被声明,则恢复到函数的输入值。
zDeclared
变量的需求:
Option Explicit
Public z As Double
Public zDeclared As Boolean
Function number(x As Double) As Double
z = 10.5
zDeclared = True
number = x
End Function
Function triple(x As Double) As Double
If zDeclared Then
triple = z * 3
Else
triple = x * 3
End If
End Function
CAVEAT:这可能无法达到预期效果。例如,如果您致电number
然后致电triple
,则变量z
将被初始化。如果删除调用number
的函数,您可能希望triple
恢复为输入值 - 但它不会。此时已完成了什么。
并且,作为解释,参数中的默认ByVal
与可选ByRef
之间的差异是ByVal
创建参数值的新实例,而{ {1}}使用现有变量,因此保留对其的任何更改。也许你已经明白了,但我认为值得澄清。
ByRef