Comment renvoyer un résultat à partir d'une fonction VBA ?

Comment retourner un résultat à partir d'une fonction ?

Par exemple :

Public Function test() As Integer
    return 1
End Function

Cela donne une erreur de compilation.

Comment faire pour que cette fonction renvoie un nombre entier ?

Solution

Pour les types de retour non-objets, vous devez affecter la valeur au nom de votre fonction, comme ceci :

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

Exemple d'utilisation :

Dim i As Integer
i = test()

Si la fonction renvoie un type d'objet, vous devez utiliser le mot-clé Set comme ceci :

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

Exemple d'utilisation :

Dim r As Range
Set r = testRange()

Notez que l'attribution d'une valeur de retour au nom de la fonction ne met pas fin à l'exécution de votre fonction. Si vous voulez quitter la fonction, vous devez dire explicitement Exit Function. Par exemple :

Function test(ByVal justReturnOne As Boolean) As Integer
    If justReturnOne Then
        test = 1
        Exit Function
    End If
    'more code...
    test = 2
End Function

Documentation : http://msdn.microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx

Commentaires (7)

Les fonctions VBA traitent le nom de la fonction elle-même comme une sorte de variable. Ainsi, au lieu d'utiliser une instruction "return", vous pouvez simplement dire :

test = 1

Notez cependant que cela ne permet pas de sortir de la fonction. Tout code suivant cette instruction sera également exécuté. Ainsi, vous pouvez avoir de nombreuses instructions d'affectation qui assignent différentes valeurs à test, et quelle que soit la valeur lorsque vous atteignez la fin de la fonction, ce sera la valeur retournée.

Commentaires (2)

Mettre la valeur de retour au nom de la fonction n'est toujours pas exactement la même chose que l'instruction return de Java (ou autre), car en Java, return quitte la fonction, comme ceci :

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

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

En VB, l'équivalent exact prend deux lignes si vous ne définissez pas la valeur de retour à la fin de votre fonction. Donc, en VB, le corollaire exact ressemblerait à ceci :

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 

Puisque c'est le cas, il est également bon de savoir que vous pouvez utiliser la variable de retour comme toute autre variable de la méthode. Comme ceci :


Public Function test(ByVal x As Integer) As Integer

    test = x ' 
Commentaires (7)