Comment faire pour retourner un résultat à partir d'une fonction VBA
Comment puis-je 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 puis-je faire de cette fonction retourne un entier?
- Documentation: msdn.microsoft.com/en-us/library/office/...
Vous devez vous connecter pour publier un commentaire.
Pour les non-objet les types de retour, vous devez affecter la valeur pour le nom de votre fonction, comme ceci:
Exemple d'utilisation:
Si la fonction renvoie un Objet de type, vous devez utiliser le
Set
mot-clé comme ceci:Exemple d'utilisation:
Noter que l'attribution d'une valeur de retour pour le nom de la fonction ne met pas fin à l'exécution de votre fonction. Si vous voulez sortir de la fonction, alors vous devez explicitement dire
Exit Function
. Par exemple:Documentation: http://msdn.microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx
Range
par exemple), vous devez utiliserSet
comme vous le feriez si l'établissement d'une variable d'objet dans une méthode régulière. Donc, si, par exemple, de "tester" une fonction qui a retourné une Plage de l'instruction de retour devrait ressembler à ceciset test = Range("A1")
.set
peut conduire à des problèmes. J'ai eu des problèmes à le faire sans, mais si j'utiliseset
je n'en ai pas :).Exit Sub
pour quitter un Sous.set test = Range("A1")
est exactement équivalente àtest = Range("A1").Value
, où "test" est défini comme une Variante, plutôt que d'une Plage.Fonctions VBA traiter le nom de la fonction elle-même comme une sorte de variable. Donc, au lieu d'utiliser un "
return
" déclaration, vous dirais simplement:Avis, cependant, que cela ne veut pas sortir de la fonction. Le code après cette déclaration sera également exécutée. Ainsi, vous pouvez avoir beaucoup d'instructions d'affectation qui affecter des valeurs différentes à
test
, et quelle que soit la valeur lorsque vous atteignez la fin de la fonction sera la valeur retournée.Juste réglage de la valeur de retour de la fonction nom n'est pas encore exactement le même que le Java (ou autre)
return
déclaration, parce qu'en java,return
quitte la fonction, comme ceci:En VB, les exacte équivalent prend deux lignes si vous n'êtes pas le réglage de la valeur de retour à la fin de votre fonction. Donc, en VB exact corollaire devrait ressembler à ceci:
Puisque c'est le cas, il est également bon de savoir que vous pouvez utiliser la variable de retour comme toute autre variable dans la méthode. Comme ceci:
Ou, à l'extrême exemple de la façon dont la variable de retour œuvres (mais pas forcément un bon exemple de la façon dont vous devriez réellement code)—celui qui va vous tenir éveillé la nuit:
Variant
et votre but est de retourner un tableau alors quelque chose commeReDim test(1 to 100)
va déclencher une erreur. Aussi, même si elle est possible de traiter le type de base commeIntegers
comme ça, c'est considéré comme quelque peu unidiomatic. Elle rend le code plus difficile à lire. VBA programmeurs d'analyse pour les lignes qui attribuer le nom de la fonction à comprendre ce qu'est une fonction n'. En utilisant le nom de la fonction comme une variable inutilement obscurcit ce.Exit Function
concernereturn
ReDim test(1 to 100)
sans déclencher d'erreur tout simplement parce que "test" n'est pas déclaré comme un tableau! et pour aucune autre raison à tous! Vous ne pouvez pas déclarer une fonction dans un tableau. Déclarer comme uneVariant
, puis il suffit de construire votre tableau de sortie (il peut être Dynamique ou Statique) à l'intérieur de cette fonctiontest
puis assigner ("=") ce tableau àtest
comme une valeur de retour. Afin de mieux manipuler, commeReDim
ing, vous devez attribuer la valeur renvoyée à une variable, par exempleDim x as Variant
et appelx = test
, après quoix
est ce que vous avez fait letest
à être!ReDim
il.Dim test As Variant
suivie parReDim test(1 to 100)
ne pose aucun problème. Que vous vous ne pouvez pas le faire avec le nom de la variante de la fonction dans le corps de la fonction montre que ce n'est pas vrai que vous pouvez utiliser la variable de retour comme toute autre variable dans le corps de la fonction, ce qui est exactement le point que je faisais. Par ailleurs, votre utilisation de points d'exclamation semble over-the-top. Dans un contexte d'internet, il semble vaguement troll-comme, bien qu'il n'y a rien de troll comme sujet de votre commentaire.Dim test As Variant
suivie parReDim test(1 to 100)
ne pose aucun problème car VBA re-interpretes l'instruction redim demande "ah, tu veux dire quetest
Variante devrait être un "tableau" sous-types". La fonction elle-même ne peut pas être déclaré comme un tableau, VBA ne le permettent pas (ne pas avoir un moyen de le faire). Vous devez utiliser unVariant
et de "trucs" sur le retour avec un tableau si c'est ce que vous voulez que la fonction de retour. Ce sera un tableau de Variant, pas une Chaîne de tableau, ou un tableau, etc.Le code ci-dessous les magasins de la valeur de retour dans la variable
retVal
et puisMsgBox
peut être utilisé pour afficher la valeur: