2017-01-20 20 views
-2

我是编程概念中的新手。我知道只有一件事是在VBA中,一个函数返回一个值,但是一个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

首先,它们都不会“返回”任何东西。第一次写入输出('ActiveSheet'),第二次显示用户界面。 – Comintern

+0

子永不返回任何东西,只有功能做到这一点:http://www.excel-easy.com/vba/examples/volatile-functions.html 你可以 – R3uK

+0

@Comintern,当我在单元格A1 = 3和单元格中输入值A2 = 2,那么它在单元格A3中返回值5。在例2中,当我在inputbox中输入任何值时,它返回值(cuberoot) –

回答

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子不能在表达式中使用像

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 

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