关于Sub程序中“返回值”概念的困惑

时间:2017-01-20 13:39:00

标签: vba excel-vba excel

我是编程概念的新手。我知道只有一件事是在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

然后(功能和子)两者如何彼此不同。请纠正我?

1 个答案:

答案 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

希望有所帮助!请查看评论者发布的链接以获取更多示例。