如何将一个函数的变量传递给另一个函数?
我想将一个函数的变量传递给另一个函数。如何将一个函数的变量传递给另一个函数?
我首先想到的是使用我听说将在Visual Basic引用传递参数的为ByRef声明。但是,我不清楚如何使用它。现在我有以下代码。
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
的价值,而不是从功能number
取变量z
的价值。
这里的工作表
提前感谢的屏幕截图。
数函数内的Z是时间的函数返回了。三重功能只是让数字通过,2.5倍3,这是你所看到的。 tipple功能不知道z。 共享变量的一种方法是在函数之外声明它们。 Dim z在函数外部为双精度值。 不过,如果你通过时Z为B1的值是2.5,那么你将得到相同的7.5就叫三倍,不传B1的值
昏暗将z作为双
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
如果您处于需要调用从第一个函数这样你可以在第二个函数中使用它?那么如何使用'z'? – Soto
你可以尝试将变量定义为全局变量。尝试使用公共z作为函数外部的双精度值。该变量应该可用于脚本中的所有功能。 –
我不得不承认,我完全被你试图做的事所困惑。我最初的想法是做这样的事情,这是类似于@dgorti建议,但如果z
从未宣布恢复到函数的输入值。
不幸的是,据我所知,VBA不支持可空双精度值,也不允许初始化全局变量。无论这些功能可能会排除对以下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
警告:这可能不是你所期望的。例如,如果你调用number
,然后调用triple
,变量z
将被初始化。如果删除调用number
的函数,则可能会希望triple
恢复为输入值 - 但不会。在这一点上完成了什么。
而且,在说明的方式,在一个参数与可选ByRef
默认ByVal
之间的不同之处在于ByVal
创建参数值的一个新实例,而ByRef
使用现有的可变,并因此保留任何更改。也许你已经理解了,但我认为这值得澄清。
Sub IncrementByVal(ByVal inp As Integer)
inp = inp + 1
End Sub
Sub IncrementByRef(ByRef inp As Integer)
inp = inp + 1
End Sub
Sub Test()
Dim X As Integer
X = 1
IncrementByVal X ' x is still 1 - the increment was for a locally scoped variable only
IncrementByRef X ' x is now 2
End Sub
你是否在Excel UI中将它们用作用户定义函数或VBA代码? – user3598756
@ user3598756这是用于VBA代码 – Soto
那么'A1','B1'和'B2'是什么?显示您的VBA代码片段,使用这些功能 – user3598756