如何从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