VBA ByRef

Argument de fonction Excel VBA ByRef

ByRef dans VBA est une fonction appelée comme par référence où nous fournissons une référence à tous les arguments de notre code, lorsque nous créons des fonctions personnalisées et que nous voulons utiliser la valeur de toute variable qui est définie précédemment avant la fonction que nous utilisons la fonction ByRef, le La syntaxe à utiliser est simple comme Function Function-Name (ByRef Variable as Data Type).

En utilisant Byref, nous pouvons pointer vers la valeur de la variable d'origine sans modifier la valeur de la variable. Cela revient à transmettre la valeur de la variable directement à la sous-procédure VBA ou à la fonction VBA.

Comment passer un argument à l'aide de l'argument VBA ByRef?

Vous pouvez télécharger ce modèle Excel VBA ByRef ici - Modèle Excel VBA ByRef

Exemple 1

Pour un exemple, regardez le code VBA ci-dessous.

Code1:

 Sub Procedure1 () Dim k As Integer k = 50 Procedure2 k MsgBox k End Sub 

Code2:

 Sous Procédure2 (ByRef k As Integer) k = k + 10 End Sub 

Dans la première procédure, j'ai déclaré la variable «k» comme Integer.

Ensuite, j'ai attribué à cette variable la valeur 50.

Après cela, j'ai ajouté une nouvelle ligne ie

Procédure2 k

Il s'agit du deuxième nom de procédure. Dans cette procédure, j'ai déclaré la variable entre parenthèses comme String dans VBA mais j'ai utilisé le mot «ByRef».

 ByRef k As Integer 

Ici, j'ai attribué la valeur de la variable «k» comme

k = k + 10

Ok, maintenant je vais exécuter le code étape par étape en appuyant sur la touche F8.

Appuyez deux fois de plus sur la touche F8 et placez un curseur sur la variable «k» pour voir la valeur de la variable «k».

Puisque nous avons attribué la valeur 50, il affiche la valeur 50. Maintenant, il a mis en évidence la ligne Procedure2 k qui est le deuxième nom de procédure.

Si j'appuie maintenant sur la touche F8, il sautera de la procédure actuelle et passera à la deuxième procédure.

Maintenant que nous avons utilisé le mot ByRef, il portait la valeur de la variable «k» de la procédure ci-dessus.

Appuyez deux fois sur la touche F8 pour revenir à la sous-procédure précédente. Si vous remarquez dans la deuxième procédure, j'ai appliqué la formule comme k = k + 10. c'est-à-dire que la valeur «k» est de 50 puis ajoute 10 de plus à cela, soit 60 au total.

Maintenant, le code est en cours d'exécution dans la première procédure et dans cette procédure, la valeur de la variable «k» est 50. Mais appuyez sur la touche F8 et voyez le résultat dans une boîte de message.

Nous avons obtenu le résultat 60 au lieu de la valeur par défaut de 50 dans cette procédure.

La raison pour laquelle nous avons obtenu 60 parce que dans la deuxième procédure, nous avons appliqué «ByRef» donc, il a porté le résultat de l'équation (k = k + 10) à la procédure actuelle.

Ici, la valeur de la première variable «k» est 50 et dans la deuxième procédure, la valeur de la variable «k» est k + 10, c'est-à-dire 60 qui est portée à la première procédure.

Dans la première procédure, la valeur d'origine de la variable «k» était 50, donc By Ref a changé la valeur d'origine de 50 à 60 en exécutant l'équation k = k + 10, c'est-à-dire k = 50 +10 = 60.

Exemple # 2

Jetez maintenant un œil à un autre exemple.

Code 1:

 Sub P1 () Dim MyNumber As Long MyNumber = 1 Appel Change_ByRef (MyNumber) 'MyNumber est modifié par la procédure Change_ByRef MsgBox "Mon numéro est maintenant:" & MyNumber End Sub 

Code 2:

 Sub Change_ByRef (ByRef NewNumber As Long) NewNumber = 14 End Sub 

Cela fonctionne exactement de la même manière que le code précédent.

Au départ, la valeur de la variable «MyNumber» est 1. Ensuite, nous appelons la procédure ci-dessous par son nom

 Appeler Change_ByRef (MyNumber)

Dans cette procédure, la valeur de la variable est 14.

Ainsi, quand il revient à la procédure précédente, il attribuera la nouvelle valeur à la variable comme 14.