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 ?
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
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.
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 ' <-- 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
Ou, l'exemple extrême de la façon dont la variable de retour fonctionne (mais pas nécessairement un bon exemple de la façon dont vous devriez coder) - celui qui vous empêchera de dormir la nuit :
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