J'ai trouvé une différence majeure à propos du mot-clé 'call' avec des fonctions ayant, ByRef Arguments (je l'ai trouvé dans l'éditeur MS-Access VBA). Si vous appelez la fonction sans le mot-clé 'Call', les artefacts ByRef ne seront pas définis pour le calle.Ex:
Private Function Test(Optional ByRef refArg As String) As Boolean
refArg = "Test"
Test = True
End Function
Si vous appelez la fonction sans le mot-clé Call
comme
Dim a As String
Test(a)
a
sera une chaîne vide, après l'appel retourne
Si vous appelez la fonction avec le Call
mot-clé comme
Dim a As String
Call Test(a)
a
contiendra la chaîne Test
L'explication détaillée fournie dans le lien suivant: http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx
Les deux ne sont pas équivalents. Dans le premier cas, entourer l'argument en parens le fait évaluer, et le résultat de l'évaluation est passé: en substance, vous passez une copie de "a", pas "a" lui-même. Ceci est rendu évident par l'analyseur. Lorsque vous entrez Test (a) et quittez la ligne, l'analyseur ajoute un espace, ce qui fait que Test (a) indique qu'il s'agit d'une expression; alors qu'avec Call Test (a), aucun espace ne sera ajouté - vous passez directement un "a". Voir la réponse de Patrick Cuff ci-dessus pour la référence doc. –
En effet, et obtenir réellement le résultat (par exemple, 'MsgBox Test (a)') restaure l'équivalence. – Ant