Hoe retourneer ik een resultaat van een functie?
Bijvoorbeeld:
Public Function test() As Integer
return 1
End Function
Dit geeft een compileerfout.
Hoe kan ik ervoor zorgen dat deze functie een geheel getal retourneert?
Antwoord 1, autoriteit 100%
Voor niet-objectretourtypen moet u de waarde als volgt toewijzen aan de naam van uw functie:
Public Function test() As Integer
test = 1
End Function
Voorbeeld van gebruik:
Dim i As Integer
i = test()
Als de functie een objecttype retourneert, moet u het trefwoord Set
als volgt gebruiken:
Public Function testRange() As Range
Set testRange = Range("A1")
End Function
Voorbeeld van gebruik:
Dim r As Range
Set r = testRange()
Houd er rekening mee dat het toewijzen van een retourwaarde aan de functienaam de uitvoering van uw functie niet beëindigt. Als je de functie wilt verlaten, moet je expliciet Exit Function
zeggen. Bijvoorbeeld:
Function test(ByVal justReturnOne As Boolean) As Integer
If justReturnOne Then
test = 1
Exit Function
End If
'more code...
test = 2
End Function
Documentatie: Functieverklaring
Antwoord 2, autoriteit 19%
VBA-functies behandelen de functienaam zelf als een soort variabele. Dus in plaats van een “return
” statement te gebruiken, zou je gewoon zeggen:
test = 1
Merk echter op dat dit niet buiten de functie valt. Elke code na deze instructie wordt ook uitgevoerd. U kunt dus veel toewijzingsinstructies hebben die verschillende waarden toewijzen aan test
, en wat de waarde ook is wanneer u het einde van de functie bereikt, de waarde die wordt geretourneerd.
Antwoord 3, autoriteit 10%
Alleen het instellen van de return-waarde op de functienaam is nog steeds niet exacthetzelfde als de Java (of andere) return
-instructie, omdat in java return
verlaat de functie als volgt:
public int test(int x) {
if (x == 1) {
return 1; // exits immediately
}
// still here? return 0 as default.
return 0;
}
In VB duurt het exacteequivalent twee regels als u de retourwaarde niet aan het einde van uw functie instelt. Dus in VB zou het exacte uitvloeisel er als volgt uitzien:
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
Aangezien dit het geval is, is het ook fijn om te weten dat je de return-variabele kunt gebruiken zoals elke andere variabele in de methode. Zoals dit:
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
Of het extreme voorbeeldvan hoe de retourvariabele werkt(maar niet per se een goed voorbeeld van hoe je eigenlijk zou moeten coderen) het voorbeeld dat je wakker houdt ‘s nachts:
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
Antwoord 4
De onderstaande code slaat de retourwaarde op in de variabele retVal
en vervolgens kan MsgBox
worden gebruikt om de waarde weer te geven:
Dim retVal As Integer
retVal = test()
Msgbox retVal