簡體   English   中英

如何從 VBA function 返回結果

[英]How to return a result from a VBA function

如何從 function 返回結果?

例如:

Public Function test() As Integer
    return 1
End Function

這會產生編譯錯誤。

如何讓這個 function 返回 integer?

對於非對象返回類型,您必須將值分配給函數的名稱,如下所示:

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

文檔: 函數語句

VBA 函數將函數名稱本身視為一種變量。 因此,與其使用“ return ”語句,不如說:

test = 1

但是請注意,這並沒有超出函數的范圍。 此語句之后的任何代碼也將被執行。 因此,您可以有許多賦值語句為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 

既然是這種情況,很高興知道您可以像方法中的任何其他變量一樣使用返回變量。 像這樣:

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

以下代碼將返回值存儲到變量retVal中,然后MsgBox可用於顯示該值:

Dim retVal As Integer
retVal = test()
Msgbox retVal

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM