VBA ByVal - Comment utiliser l'argument de fonction ByVal? (Exemples)

Argument de fonction Excel VBA ByVal

ByVal est une déclaration en VBA. ByVal signifie By Value, c'est-à-dire que lorsque la sous-procédure appelée depuis la procédure, la valeur des variables est réinitialisée à la nouvelle valeur de la nouvelle procédure appelée.

Dans VBA, lorsque nous travaillons avec des fonctions qui sont appelées dans différentes fonctions, il existe certaines circonstances dans lesquelles la valeur de l'argument d'origine est modifiée lorsque la fonction est appelée; l'instruction byval interdit la procédure ou le code de modifier la valeur de l'argument.

Je sais que ce n'est pas facile à comprendre en lisant l'explication, mais avec des exemples pratiques de fonction, nous pouvons en fait mieux comprendre.

Comment utiliser ByVal Argument dans VBA?

Exemple 1

Par exemple, regardez les codes VBA ci-dessous.

Code:

Sous Macro1 () Dim k As Integer k = 50 Macro2 k MsgBox k End Sub
Sous Macro2 (ByVal k As Integer) k = k + 5 End Sub

Dans les deux procédures macro ci-dessus, nous avons une variable commune «k» à travers les procédures. Laissez-moi vous expliquer cela en détail avant de voir le résultat.

Dans la première macro, nous avons attribué la valeur de 50 à la variable «k».

Dim k As Integer k = 50

Ensuite, nous avons appelé la deuxième procédure de macro à partir de la première macro.

Macro2 k

Dans la Macro2, nous avons réinitialisé la valeur de la variable à k = k + 5. Dans cette macro, nous avons utilisé l'argument ByVal pour affecter la valeur à la variable «k».

Maintenant, pour comprendre «ByVal», exécutons le code VBA ligne par ligne en appuyant sur la touche F8.

# 1 - En appuyant d'abord sur la touche F8, la première ligne de Macro1 sera mise en évidence.

À ce stade, placez un curseur sur la variable «k», et il devrait afficher la valeur de la variable «k».

Pour le moment, la valeur de «k» est nulle.

# 2 - Appuyez une fois de plus sur la touche F8 et il passera à la troisième ligne.

Même maintenant, la valeur de «k» est toujours nulle.

# 3 - Appuyez maintenant sur la touche F8 et voyez la valeur du k.

Étant donné que la valeur «k» est définie sur 50 et que le code est exécuté, la valeur est donc 50.

# 4 - Maintenant, la ligne en surbrillance est «Macro2 k», c'est-à-dire qu'en appuyant sur la touche F8, elle passera à la deuxième procédure, Macro2.

# 5 - Même maintenant, la valeur de la variable «k» dans cette procédure apparaît également comme 50. Mais à l'intérieur de cette macro, nous réinitialisons la valeur de la variable «k» comme k = k + 5, c'est-à-dire 55. Maintenant, appuyez sur le bouton Touche F8 deux fois de plus.

Comme vous pouvez le voir ci-dessus, la valeur «k» est maintenant de 55.

# 6 - Appuyez sur la touche F8, et il reviendra à la procédure Macro1.

Lorsque la macro est revenue à la procédure d'origine Macro1, la valeur de notre variable «k» n'est plus 55 plutôt que la valeur d'origine dans cette procédure, c'est-à-dire 50.

Lorsque vous appuyez sur la touche F8, nous ne pouvons voir que 50 dans la boîte de message dans VBA.

Ainsi, comme nous l'avons dit au début de l'article, l'argument «ByVal» ne porte pas de valeurs d'une procédure à une autre, même s'il porte la valeur de la variable de la première macro à la seconde au moment où il rencontre la ligne " ByVal ”quand il revient à la macro d'origine, il réinitialise la valeur à la valeur d'origine dans la procédure uniquement.

Exemple # 2

Jetez maintenant un œil aux deux macros ci-dessous.

Code:

Sub P1 () Dim k As Integer: k = 10 Appel P2 (k) MsgBox k End Sub
Sub P2 (ByVal k As Integer) k = 15 End Sub
  • Ceci est similaire au premier exemple. Dans la macro «P1», nous avons attribué la valeur de 10 à la variable «k», et dans la même macro «P1», nous avons appelé la deuxième macro «P2» avec la variable «k».
  • Dans la deuxième macro «P2», nous avons utilisé l'argument ByVal, et cette fois, la valeur de la variable «k» est 15.

Cette macro porte la valeur de la variable «k» comme dix de la macro «P1» à la macro «P2», et dans cette macro, la valeur sera remise à 15, mais au moment où elle revient pour terminer la macro vers la première macro «P1» la valeur de «k» revient à 10 et non à 15.

Choses dont il faut se rappeler

L'argument ByVal n'affecte pas la valeur de la variable même après l'exécution de la macro, mais avec l'argument By Ref, nous pouvons transporter la valeur de la variable d'une macro à l'autre.

Articles intéressants...