Comment puis-je retourner un résultat d'une fonction?
Par exemple:
Public Function test() As Integer
return 1
End Function
Cela donne une erreur de compilation.
Comment puis-je faire en sorte que cette fonction retourne un entier?
Pour les types de retour non-objet, 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
de la manière suivante:
Public Function testRange() As Range
Set testRange = Range("A1")
End Function
Exemple d'utilisation:
Dim r As Range
Set r = testRange()
Notez que l'affectation d'une valeur de retour au nom de la fonction ne met pas fin à l'exécution de votre fonction. Si vous souhaitez quitter la fonction, vous devez explicitement dire 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 direz simplement:
test = 1
Notez cependant que cela ne sort pas de la fonction. Tout code après cette instruction sera également exécuté. Ainsi, vous pouvez avoir plusieurs instructions d'affectation qui attribuent des valeurs différentes à test
, et quelle que soit la valeur à atteindre lorsque la fin de la fonction est atteinte, la valeur renvoyée est renvoyée.
Définir simplement la valeur de retour sur le nom de la fonction n’est toujours pas exactement identique au Java (ou autre) return
instruction, 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 . Ainsi, dans 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
Comme c'est le cas, il est également bon de savoir que vous pouvez utiliser la variable de retour comme n'importe quelle autre variable de la méthode. Comme ça:
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 bien, l'exemple extrême du fonctionnement de la variable de retour (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