Hoe een resultaat van een VBA-functie teruggeven

Hoe kan ik een resultaat van een functie teruggeven?

Bijvoorbeeld:

Public Function test() As Integer
    return 1
End Function

Dit geeft een compileerfout.

Hoe kan ik deze functie een geheel getal laten teruggeven?

Oplossing

Voor niet-object return types moet je de waarde toewijzen aan de naam van je functie, zoals dit:

Public Function test() As Integer
    test = 1
End Function

Voorbeeld gebruik:

Dim i As Integer
i = test()

Als de functie een Object type teruggeeft, dan moet je het Set sleutelwoord gebruiken zoals dit:

Public Function testRange() As Range
    Set testRange = Range("A1")
End Function

Voorbeeld gebruik:

Dim r As Range
Set r = testRange()

Merk op dat het toekennen van een return-waarde aan de functienaam de uitvoering van je functie niet beëindigt. Als je de functie wilt beëindigen, dan 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: http://msdn.microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx

Commentaren (7)

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 de functie niet verbreekt. Alle code na dit statement zal ook worden uitgevoerd. Je kunt dus veel opdracht-statements hebben die verschillende waarden aan test toekennen, en wat de waarde is als je het einde van de functie bereikt, zal de teruggegeven waarde zijn.

Commentaren (2)

Alleen de return-waarde op de functienaam zetten is nog steeds niet exact hetzelfde als het Java (of andere) return statement, omdat in java, return de functie afsluit, zoals dit:

public int test(int x) {
    if (x == 1) {
        return 1; // exits immediately
    }

    // still here? return 0 as default.
    return 0;
}

In VB, duurt het exacte equivalent twee regels als je de return waarde niet aan het eind van je functie zet. Dus, in VB zou de exacte corollary 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 leuk 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 ' 
Commentaren (7)