如何从VBA函数返回结果
如何从函数返回结果?
例如:
Public Function test() As Integer return 1 End Function
这给编译错误。
我如何使这个函数返回一个整数?
对于非对象返回types,您必须将值分配给函数的名称,如下所示:
Public Function test() As Integer test = 1 End Function
用法示例:
Dim i As Integer i = test()
如果函数返回一个Objecttypes,那么你必须像这样使用Set
关键字:
Public Function testRange() As Range Set testRange = Range("A1") End Function
用法示例:
Dim r As Range Set r = testRange()
请注意,为函数名称分配返回值不会终止您的函数的执行。 如果你想退出函数,那么你需要明确地说Exit Function
。 例如:
Function test(ByVal justReturnOne As Boolean) As Integer If justReturnOne Then test = 1 Exit Function End If 'more code... test = 2 End Function
文档: http : //msdn.microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx
VBA函数将函数名称本身视为一种variables。 所以不要用“ return
”语句,而只是说:
test = 1
不过要注意的是,这并没有打破这个function。 此声明后的任何代码也将被执行。 因此,可以有许多赋值语句来指定不同的值进行test
,当达到函数末尾时,值将是返回的值。
只是将函数名的返回值设置为与Java(或其他) return
语句不完全相同 ,因为在java中, return
退出函数,如下所示:
public int test(int x) { if (x == 1) { return 1; // exits immediately } // still here? return 0 as default. return 0; }
在VB中, 如果不在函数的结尾处设置返回值 ,则确切的等效项占用两行。 所以,在VB中,确切的推论如下所示:
Public Function test(ByVal x As Integer) As Integer If x = 1 Then test = 1 ' does not exit immediately. You must manually terminate... Exit Function ' to exit End If ' Still here? return 0 as default. test = 0 ' no need for an Exit Function because we're about to exit anyway. End Function
既然是这样,那么知道你可以像方法中的任何其他variables一样使用返回variables也是很好的。 喜欢这个:
Public Function test(ByVal x As Integer) As Integer test = x ' <-- set the return value If test <> 1 Then ' Test the currently set return value test = 0 ' Reset the return value to a *new* value End If End Function
或者,返回variables如何工作的一个极端的例子 (但不一定是你应该如何实际编码的一个很好的例子) – 一个能让你在晚上继续工作的例子:
Public Function test(ByVal x As Integer) As Integer test = x ' <-- set the return value If test > 0 Then ' RECURSIVE CALL...WITH THE RETURN VALUE AS AN ARGUMENT, ' AND THE RESULT RESETTING THE RETURN VALUE. test = test(test - 1) End If End Function
下面的代码将返回值存储到variablesretVal
并且可以使用msgbox
来显示值
Dim retVal As Integer retVal = test() Msgbox retVal