2017-01-20 19 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 

希望幫助!請查看評論者發佈的鏈接以獲取更多示例。