Erreur de non-concordance de type d'argument VBA ByRef - 3 principales raisons et corrections d'erreurs

Non-correspondance du type d'argument ByRef dans Excel VBA

Dans cet article, nous expliquons l'erreur rencontrée lors de l'utilisation d'Excel VBA ByRef comme «Erreur de non-concordance de type d'argument». Avant cela, permettez-moi de vous présenter d'abord "By Ref". Les variables sont la clé de tout langage de programmation, et VBA n'est pas différent non plus. Nous avons vu de nombreuses façons de déclarer des variables, l'une de ces façons de déclarer des variables consiste à utiliser les mots «ByRef» et «ByVal».

Que signifie ByRef?

«ByRef» signifie «Par référence» en utilisant ce mot, nous pouvons en fait passer des arguments aux procédures (pour les deux sous et fonction) par référence. Ceci est différent de son frère «By Val», qui n'est pas flexible mais fixe dans la nature.

Pour comprendre cela, jetons un coup d'œil aux deux macros ci-dessous.

Code:

Sub Macro1 () Dim A As Long A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Nous avons deux sous-procédures ici nommées Macro1 et Macro2, respectivement. Pour mieux comprendre cela, exécutez la macro ligne par ligne en appuyant sur la touche F8.

Appuyez sur la touche F8 pour capturer la valeur de la variable «A» comme 50.

La ligne de code suivante indique «Macro2 A», c'est-à-dire le nom de la deuxième macro et «A» est la variable définie par le mot «By Ref».

Comme vous pouvez le voir ci-dessus, au moment où nous exécutons la ligne de code «Macro2 A», elle est passée à la sous-procédure VBA suivante de la procédure ci-dessus.

Maintenant, nous pouvons voir que la valeur de la variable «A» est 50. En effet, puisque nous avons utilisé le mot «ByRef» pour déclarer la variable «A», qui est la même que dans Macro1, elle a capturé la valeur que nous avons assigné à cette variable «A» de la Macro1 .

Maintenant, dans cette macro ( Macro2 ) l'équation dit A = A * 10 ie A = 50 * 100. Appuyez 3 fois sur la touche F8 pour revenir à la macro ci-dessus ( Macro1 ).

Maintenant, appuyez une fois de plus sur la touche F8 pour voir la valeur de la variable «A» dans la boîte de message dans VBA.

La valeur indique 500.

Même si la valeur que nous avons attribuée dans cette macro (Macro1) est de 50, en utilisant le mot ByRef, nous avons en fait déclenché la sous-procédure Macro2 en conservant la valeur de la variable «A» de Macro1, puis en exécutant la valeur de A en multipliant 10.

Les 3 principales raisons de la non-correspondance du type d'argument VBA Byref

Ci-dessus, nous avons vu comment fonctionne «ByRef», mais nous sommes tenus de faire certaines des erreurs qui ont invariablement entraîné l'envoi d'un message d'erreur VBA comme «ByRef Argument Type Mismatch».

Ceci est dû à de nombreuses raisons, et dans cette section, nous allons vous montrer comment corriger cette erreur et déboguer le code.

Raison d'erreur n ° 1 - Différents noms de variable

L'une des principales raisons de cette erreur dans Excel VBA est due aux différentes variables passées dans deux procédures. Par exemple, regardez les codes ci-dessous.

Code:

Sub Macro1 () Dim A As Long A = 50 Macro2 B MsgBox A End Sub Sub Macro2 (ByRef A As Long) B = B * 10 End Sub

Dans Macro1, nous avons utilisé la variable «A», et dans Macro2, nous avons utilisé la variable «B». Maintenant, si vous essayez d'exécuter le code, nous obtiendrons une erreur VBA en tant que «Incohérence de type d'argument ByRef».

Comme vous pouvez le voir ci-dessus, la variable «B» a été mise en surbrillance car le type de nom de variable est incompatible.

Solution: pour résoudre ce problème, nous devons nous assurer que les noms de variables dans les deux procédures sont exacts.

Raison d'erreur 2: différents types de données variables

Même si les noms de variables sont identiques, cela provoque toujours une erreur, c'est à cause du type de données que nous leur attribuons. Regardez le code ci-dessous.

Code:

Sub Macro1 () Dim A As Integer A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Dans les codes ci-dessus, j'ai déclaré la variable «A» comme type de données Integer dans Macro1, et dans Macro2, le même type de données a été attribué à «Long».

Lorsque nous exécutons ce code, cela provoquera une erreur VBA "ByRef Argument Type Mismatch".

En effet, nous avons attribué deux types de données différents pour le même nom de variable.

Solution: le type de données doit être le même dans les deux procédures.

Raison d'erreur 3: types de données variables manquants dans une macro

L'erreur Excel VBA, «Incohérence de type d'argument ByRef», peut se produire en raison du type de données attribué dans une macro et non affecté dans une autre macro.

Code:

Sous Macro1 () A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Dans le code ci-dessus de Macro1, je n'ai déclaré aucune variable, mais simplement assigné la valeur à la variable.

Par contre, pour Macro2, j'ai déclaré la variable «A» aussi longtemps. Si vous essayez d'exécuter ce code, cela provoquera l'erreur VBA «ByRef Argument Type Mismatch».

Solution1: pour éviter ce genre de situation, la première solution consiste à déclarer la variable dans les deux procédures et à affecter le même type de données.

Solution 2: Une solution alternative est de rendre obligatoire la déclaration de variable en ajoutant le mot «Option Explicit» en haut du module.

Ce que cela fera, c'est qu'avant d'afficher l'erreur VBA "ByRef Argument Type Mismatch", il nous demande en fait de déclarer la variable en premier.

Ainsi, Option Explicit est toujours utile dans VBA.

Choses dont il faut se rappeler

  • ByRef est l'opposé de By Val.
  • ByRef transporte la référence d'une procédure à une autre.
  • Le nom de la variable et le type de données doivent être identiques dans les deux procédures.
  • Chaque variable doit être déclarée séparément dans le cas de plusieurs variables.

Articles intéressants...