Wie kann ich ein Ergebnis einer Funktion zurückgeben?
Zum Beispiel:
Public Function test() As Integer
return 1
End Function
Dies führt zu einem Kompilierungsfehler.
Wie bringe ich diese Funktion dazu, eine Ganzzahl zurückzugeben?
Bei Rückgabetypen, die keine Objekte sind, müssen Sie dem Namen Ihrer Funktion den folgenden Wert zuweisen:
Public Function test() As Integer
test = 1
End Function
Anwendungsbeispiel:
Dim i As Integer
i = test()
Wenn die Funktion einen Objekttyp zurückgibt, müssen Sie das Schlüsselwort Set
wie folgt verwenden:
Public Function testRange() As Range
Set testRange = Range("A1")
End Function
Anwendungsbeispiel:
Dim r As Range
Set r = testRange()
Beachten Sie, dass das Zuweisen eines Rückgabewerts zum Funktionsnamen die Ausführung Ihrer Funktion nicht beendet. Wenn Sie die Funktion beenden möchten, müssen Sie Exit Function
explizit sagen. Zum Beispiel:
Function test(ByVal justReturnOne As Boolean) As Integer
If justReturnOne Then
test = 1
Exit Function
End If
'more code...
test = 2
End Function
Dokumentation: http://msdn.Microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx
VBA-Funktionen behandeln den Funktionsnamen selbst als eine Art Variable. Anstatt also eine "return
" -Anweisung zu verwenden, würden Sie einfach sagen:
test = 1
Beachten Sie jedoch, dass dies nicht aus der Funktion ausbricht. Jeder Code nach dieser Anweisung wird ebenfalls ausgeführt. Auf diese Weise können Sie viele Zuweisungsanweisungen haben, die test
unterschiedliche Werte zuweisen. Wenn Sie das Ende der Funktion erreichen, wird der Wert zurückgegeben.
Das einfache Setzen des Rückgabewerts auf den Funktionsnamen ist immer noch nicht genau mit der Anweisung Java (oder einer anderen) return
identisch, da return
in Java die Anweisung beendet Funktion wie folgt:
public int test(int x) {
if (x == 1) {
return 1; // exits immediately
}
// still here? return 0 as default.
return 0;
}
In VB benötigt das genaue Äquivalent zwei Zeilen , wenn Sie den Rückgabewert am Ende Ihrer Funktion nicht setzen . Also würde in VB die genaue Folge so aussehen:
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
Da dies der Fall ist, ist es auch gut zu wissen, dass Sie die Rückgabevariable wie jede andere Variable in der Methode verwenden können. So was:
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
Oder das extreme Beispiel , wie die Rückgabevariable funktioniert (aber nicht unbedingt ein gutes Beispiel dafür, wie Sie eigentlich codieren sollten) - die, die dich nachts wach hält:
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