Error de coincidència del tipus d'argument de VBA ByRef | 3 raons principals i correccions d'errors

ByRef Argument no coincideix en Excel VBA

En aquest article, expliquem l’error que s’ha produït mentre s’utilitzava l’Excel VBA ByRef com a “Error de desajustament de tipus d’argument”. Abans, deixeu-me presentar-vos primer per "Per referència". Les variables són claus per a qualsevol llenguatge de programació i VBA tampoc no és diferent. Hem vist moltes maneres de declarar variables, una manera de declarar variables és mitjançant les paraules "ByRef" i "ByVal".

Què significa ByRef?

"ByRef" significa "Per referència", utilitzant aquesta paraula podem passar arguments a procediments (tant per a subfuncions com per funcions) per referència. Això és diferent al seu germà "By Val", que no és flexible, sinó de naturalesa fixa.

Per entendre-ho, donem un cop d'ull a les dues macros següents.

Codi:

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

Aquí tenim dos subprocediments anomenats respectivament Macro1 i Macro2. Per entendre-ho, executeu millor la macro línia per línia prement la tecla F8.

Premeu la tecla F8 per capturar el valor de la variable "A" com a 50.

La següent línia de codi diu "Macro2 A", és a dir, el nom de la segona macro i "A" és la variable definida mitjançant la paraula "Per ref".

Com podeu veure més amunt en el moment que executem la línia de codi "Macro2 A", ha saltat al següent procediment secundari VBA del procediment anterior.

Ara podem veure que el valor de la variable "A" és 50, ja que hem utilitzat la paraula "ByRef" per declarar la variable "A" que és la mateixa que a Macro1 ha capturat el valor que hem assignat a aquesta variable "A" de la Macro1.

Ara en aquesta macro (Macro2) l’equació diu A = A * 10, és a dir, A = 50 * 100. Premeu la tecla F8 3 vegades per tornar a la macro anterior (Macro1).

Ara premeu una vegada més la tecla F8 per veure el valor de la variable "A" al quadre de missatges de VBA.

El valor diu 500.

Tot i que el valor que hem assignat en aquesta macro (Macro1) és 50, en utilitzar la paraula ByRef realment hem activat el subprocediment Macro2 conservant el valor de la variable "A" de Macro1 i executant el valor d'A multiplicant 10.

3 raons principals per les diferències de tipus d'argument de VBA Byref

Més amunt hem vist com funciona "ByRef", però hem de cometre alguns dels errors que sempre van provocar el llançament d'un missatge d'error VBA com a "Desajust de tipus d'argument de ByRef".

Això és degut a moltes raons i en aquesta secció us mostrarem com es corregeix aquest error i es depura el codi.

Podeu descarregar aquesta plantilla Excel de discrepància del tipus d’argument VBA ByRef aquí - Plantilla Excel de discrepància del tipus d’argument VBA ByRef

Motiu d'error núm. 1: diferents noms de variables

Un dels motius principals per obtenir aquest error a Excel VBA es deu a les diferents variables aprovades en dos procediments. Per obtenir un exemple, consulteu els codis següents.

Codi:

 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 

A Macro1 hem utilitzat la variable “A” i a Macro2 hem utilitzat la variable “B”. Ara, si proveu d'executar el codi, obtindrem un error VBA com a "Discrepància del tipus d'argument ByRef".

Com podeu veure més amunt, la variable "B" s'ha ressaltat perquè el tipus de nom de la variable no coincideix.

Solució: Per superar aquest problema, hem d'assegurar-nos que els noms de variables en el procediment siguin exactes.

Motiu d’error 2: diferents tipus de dades variables

Tot i que els noms de variables siguin iguals, provoca un error, això és a causa del tipus de dades que els assignem. Mireu el codi següent.

Codi:

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

Als codis anteriors, he declarat la variable "A" com a tipus de dades enter a Macro1 i a Macro2 a la mateixa variable se li va assignar el tipus de dades com a "Llarg".

Quan executem aquest codi, provocarà un error de vba "No coincideix el tipus d'argument de ByRef".

Això es deu al fet que hem assignat dos tipus de dades diferents per al mateix nom de variable.

Solució: El tipus de dades hauria de ser el mateix en els dos procediments.

Motiu d’error 3: falten tipus de dades variables en una macro

L'error d'Excel VBA "No coincideix amb el tipus d'argument ByRef" es pot produir a causa d'un tipus de dades assignat en una macro i no assignat en una altra macro.

Codi:

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

Al codi anterior de Macro1, no he declarat cap variable sinó que simplement he assignat el valor a la variable.

D'altra banda, per a Macro2 he declarat la variable "A" com a llarga. Si proveu d'executar aquest codi, es produirà un error VBA "ByRef Argument Type Mismatch".

Solució 1: Per evitar aquest tipus de situacions, la primera solució és declarar la variable en els dos procediments i assignar el mateix tipus de dades.

Solució 2: una alternativa La solució és fer obligatòria la declaració de variables afegint la paraula "Opció explícita" a la part superior del mòdul.

El que farà això és que abans que es mostri l'error VBA "ByRef Argument Type Mismatch", en realitat ens demana que declarem la variable primer.

Per tant, Option Explicit sempre és útil a VBA.

Coses que cal recordar

  • ByRef és el contrari de By Val.
  • ByRef transporta la referència d'un procediment a un altre.
  • El nom de la variable, el tipus de dades, hauria de ser el mateix en els dos procediments.
  • Cada variable s'ha de declarar per separat en cas de múltiples variables.