Een resultaat van een VBA-functie retourneren

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 Setals 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 Functionzeggen. 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 returnverlaat 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 retValen vervolgens kan MsgBoxworden gebruikt om de waarde weer te geven:

Dim retVal As Integer
retVal = test()
Msgbox retVal

LEAVE A REPLY

Please enter your comment!
Please enter your name here

9 + 17 =

Other episodes