-->

如何从VBA函数返回一个结果如何从VBA函数返回一个结果(How to return a resul

2019-05-10 09:58发布

如何从函数返回一个结果?

例如:

Public Function test() As Integer
    return 1
End Function

这给出了一个编译错误。

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

Answer 1:

对于非对象返回类型,您必须将值分配给你的功能,这样的名称:

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

实例:

Dim i As Integer
i = test()

如果函数返回一个对象类型,那么你就必须使用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



Answer 2:

VBA函数将函数名本身作为一种变量。 因此,而不是使用“的return ”的声明,你只是说:

test = 1

请注意,虽然,这并不打出来的功能。 这个声明之后的任何代码也将被执行。 因此,你可以有一个分配不同的值很多赋值语句test ,不管值是,当你到达函数结束时将返回的值。



Answer 3:

就在返回值设置为函数的名称仍是不完全一样的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 

既然是这样的话,它也很高兴知道你可以使用返回变量像法任何其他变量。 像这样:

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 

或者,极端例子,如何返回变量作品 (但不一定是一个很好的例子,你应该如何实际代码)-the一个,将让你在夜间:

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


Answer 4:

下面的代码存储在给变量的返回值retVal ,然后MsgBox可用于显示的值:

Dim retVal As Integer
retVal = test()
Msgbox retVal


文章来源: How to return a result from a VBA function