我是编程概念的新手。我知道只有一件事是在VBA中,Function返回一个值,但Sub不会。我有两个Sub过程的例子和两个返回值,如下所示:
例子1:当我在A1和A2单元格中输入值时,它会在A3中返回值。
Sub Addition()
a = ActiveSheet.Range("A1").Value
b = ActiveSheet.Range("A2").Value
ActiveSheet.Range("A3").Value = a + b
End Sub
示例2:输入任何正数后,它还会返回立方根值:
Sub CubeRoot()
Num = InputBox("Enter a positive number")
MsgBox Num ^ (1/3) & "is the cube root."
End Sub
然后(功能和子)两者如何彼此不同。请纠正我?
答案 0 :(得分:3)
你是正确的,Function
会返回一个值,而Sub
则不会。这种差异意味着可以使用Function
,就好像它是一个值,但Sub
不能。例如,
Function twelve() as Long
twelve = 12
End Function
允许你说
Debug.Print 3 + twelve
就像你说的那样
Debug.Print 3 + 12
函数的“返回值”是将参与函数所包含的任何表达式的值。在VBA中,该返回值与函数具有相同的名称(例如,上面的twelve
)。
在Sub
中,无论Sub
可能做什么,以及它可能产生的任何值,都不能将其视为值。例如,您的CubeRoot
sub不能在
Debug.Print 2 * CubeRoot() ' Doesn't compile
但是,一个功能可以:
Function CubeRootFunction(d as Double) as Double
CubeRootFunction = d ^ (1.0/3.0)
End Function
Debug.Print 2 * CubeRootFunction(8) ' Compiles and works fine
希望有所帮助!请查看评论者发布的链接以获取更多示例。