Kaip grąžinti funkcijos rezultatą?
Pavyzdžiui:
Public Function test() As Integer
return 1
End Function
Gaunama kompiliavimo klaida.
Kaip padaryti, kad ši funkcija grąžintų sveikąjį skaičių?
Jei grąžinami ne objektų tipai, reikšmę reikia priskirti funkcijos pavadinimui, pvz., taip:
Public Function test() As Integer
test = 1
End Function
Naudojimo pavyzdys:
Dim i As Integer
i = test()
Jei funkcija grąžina Objekto tipą, turite naudoti raktinį žodį Set
, pvz:
Public Function testRange() As Range
Set testRange = Range("A1")
End Function
Naudojimo pavyzdys:
Dim r As Range
Set r = testRange()
Atkreipkite dėmesį, kad funkcijos pavadinimui priskyrus grįžtamąją vertę, funkcijos vykdymas nenutraukiamas. Jei norite užbaigti funkciją, turite aiškiai nurodyti Exit Function
. Pavyzdžiui:
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
VBA funkcijos patį funkcijos pavadinimą laiko tam tikru kintamuoju. Taigi, užuot naudoję "return
" teiginį, tiesiog pasakykite:
test = 1
Tačiau atkreipkite dėmesį, kad tai nepadeda ištrūkti iš funkcijos. Bet koks kodas po šio teiginio taip pat bus vykdomas. Taigi, galite turėti daugybę priskyrimo teiginių, kurie test
priskiria skirtingas reikšmes, ir bet kokia reikšmė bus grąžinama, kai pasieksite funkcijos pabaigą.
Vien tik grąžinimo reikšmės nustatymas į funkcijos pavadinimą vis tiek nėra tiksliai tas pats, kas Java (ar kitas) return
teiginys, nes Java sistemoje return
išveda funkciją, pvz., taip:
public int test(int x) {
if (x == 1) {
return 1; // exits immediately
}
// still here? return 0 as default.
return 0;
}
VB kalba tikslus atitikmuo užtrunka dvi eilutes, jeigu funkcijos pabaigoje nenustatote grąžinimo reikšmės. Taigi, VB tikslioji pasekmė atrodytų taip:
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
Kadangi taip yra, taip pat malonu žinoti, kad grąžinimo kintamąjį galite naudoti kaip bet kurį kitą metodo kintamąjį. Pavyzdžiui, taip:
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
Arba kraštutinis pavyzdys, kaip veikia grąžinimo kintamasis (bet nebūtinai geras pavyzdys, kaip iš tikrųjų turėtumėte koduoti) - tas, kuris neleis jums miegoti naktimis:
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