如何从VBA函数返回结果

时间:2010-05-06 14:11:01

标签: excel vba function return return-value

如何从函数返回结果?

例如:

Public Function test() As Integer
    return 1
End Function

这会产生编译错误。

如何让这个函数返回一个整数?

4 个答案:

答案 0 :(得分:378)

对于非对象返回类型,您必须将值赋给函数名称,如下所示:

Public Function test() As Integer
    test = 1
End Function

使用示例:

Dim i As Integer
i = test()

如果函数返回Object类型,则必须使用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

答案 1 :(得分:82)

VBA函数将函数名称本身视为一种变量。因此,您只需说:

,而不是使用“return”语句
test = 1

但请注意,这并没有突破该功能。此语句后的任何代码也将被执行。因此,您可以使用许多赋值语句为test分配不同的值,并且当您到达函数末尾时的值将是返回的值。

答案 2 :(得分:33)

仅将函数名称的返回值设置为 与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 

既然如此,那么知道你可以像使用方法中的任何其他变量一样使用return变量也是很好的。像这样:

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 

或者,返回变量如何工作的极端示例 (但不一定是你应该如何实际编码的一个很好的例子) - 那会让你保持活力的在晚上:

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

答案 3 :(得分:-3)

以下代码将返回值存储到变量retVal中,然后MsgBox可用于显示值:

Dim retVal As Integer
retVal = test()
Msgbox retVal