Kako iz funkcije vrnem rezultat?
Na primer:
Public Function test() As Integer
return 1
End Function
To povzroči napako pri sestavljanju.
Kako naj ta funkcija vrne celo število?
Za neobjektne tipe vrnitve morate vrednost pripisati imenu funkcije, kot sledi:
Public Function test() As Integer
test = 1
End Function
Primer uporabe:
Dim i As Integer
i = test()
Če funkcija vrne tip objekta, morate uporabiti ključno besedo Set
na naslednji način:
Public Function testRange() As Range
Set testRange = Range("A1")
End Function
Primer uporabe:
Dim r As Range
Set r = testRange()
Upoštevajte, da dodelitev povratne vrednosti imenu funkcije ne zaključi izvajanja vaše funkcije. Če želite zaključiti funkcijo, morate izrecno navesti Exit Function
. Na primer:
Function test(ByVal justReturnOne As Boolean) As Integer
If justReturnOne Then
test = 1
Exit Function
End If
'more code...
test = 2
End Function
Dokumentacija: http://msdn.microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx
Funkcije VBA obravnavajo samo ime funkcije kot neke vrste spremenljivko. Namesto stavka "return
" bi torej rekli:
test = 1
Opazite pa, da s tem ne prekinete delovanja funkcije. Izvršila se bo tudi vsa koda, ki bo sledila tej izjavi. Tako imate lahko veliko dodelitvenih stavkov, ki pripisujejo različne vrednosti funkciji test
, pri čemer bo vrnjena vrednost tista, ki je na koncu funkcije.
Samo nastavitev povratne vrednosti na ime funkcije še vedno ni povsem enaka kot javanska (ali druga) izjava return
, saj v javi return
zaključi funkcijo, kot je to:
public int test(int x) {
if (x == 1) {
return 1; // exits immediately
}
// still here? return 0 as default.
return 0;
}
V VB je za točen ekvivalent potrebna dve vrstici, če ne določite povratne vrednosti na koncu funkcije. V VB bi bila torej natančna posledica videti takole:
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
Ker je tako, je lepo vedeti, da lahko spremenljivko return uporabite kot katero koli drugo spremenljivko v metodi. Tako kot na primer:
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
Ali pa skrajni primer, kako spremenljivka return deluje (ki pa ni nujno dober primer, kako bi morali dejansko kodirati) - tisti, zaradi katerega ne boste mogli spati:
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