Pogreška neusklađenosti tipa argumenta VBA ByRef - Tri glavna razloga i ispravci pogrešaka

ByRef Neusklađenost argumenta u Excelu VBA

U ovom članku objašnjavamo pogrešku koja se pojavila tijekom upotrebe Excela VBA ByRef kao „Pogreška neusklađenosti tipa argumenta“. Prije toga, najprije ću vas upoznati s „By Ref“. Varijable su ključne za bilo koji programski jezik, a ni VBA se ne razlikuje. Vidjeli smo mnogo načina deklariranja varijabli jedan od takvih načina deklariranja varijabli je pomoću riječi "ByRef" i "ByVal".

Što znači ByRef?

"ByRef" znači "Po referenci" koristeći ovu riječ, zapravo možemo prosljeđivati ​​argumente procedurama (i za pod i funkciju) referencom. To je za razliku od njegovog brata "By Val", koji nije fleksibilan, već je fiksne naravi.

Da bismo to razumjeli, pogledajmo donja dva makronaredba.

Kodirati:

Podmakronaredba1 () Dim A dokle A = 50 Makro2 A MsgBox A Kraj Podmakronaredba Macro2 (ByRef A Koliko dugo) A = A * 10 Krajnja podmakronaredba

Ovdje imamo dva potprocedura nazvana Macro1, odnosno Macro2. Da biste to bolje razumjeli, pokrenite makronaredbu po liniju pritiskom na tipku F8.

Pritisnite tipku F8 da biste vrijednost varijable "A" zabilježili kao 50.

Sljedeći redak koda kaže "Macro2 A", tj. Naziv druge makronaredbe i "A" varijabla je definirana kroz riječ "By Ref".

Kao što vidite gore, u trenutku kada izvršimo redak koda "Macro2 A", on je iz gornjeg postupka prebačen na sljedeći VBA potprocedura.

Sada možemo vidjeti vrijednost varijable "A" je 50. To je zato što, budući da smo upotrijebili riječ "ByRef" za deklariranje varijable "A", koja je ista kao u Macro1, zabilježila je vrijednost koju imamo dodijeljena ovoj varijabli "A" iz Makro1 .

Sada u ovoj jednadžbi makronaredbe ( Macro2 ) stoji A = A * 10 tj. A = 50 * 100. Pritisnite tipku F8 3 puta da biste se vratili na gornju makronaredbu ( Macro1 ).

Sada pritisnite još jednom tipku F8 da biste vidjeli vrijednost varijable "A" u okviru za poruke u VBA.

Vrijednost kaže 500.

Iako je vrijednost koju smo dodijelili u ovoj makronaredbi (Macro1) 50, pomoću riječi ByRef zapravo smo pokrenuli podproces Macro2 zadržavanjem vrijednosti varijable "A" iz Macro1, a zatim izvršavanjem vrijednosti A množenjem 10.

Tri glavna razloga za nepodudaranje tipa argumenta tipa VBA Byref

Iznad smo vidjeli kako funkcionira "ByRef", ali obvezno smo počinili neke pogreške koje su uvijek rezultirale izbacivanjem VBA poruke o pogrešci kao "ByRef Argument Type Mismatch."

To je zbog mnogih razloga, a u ovom ćemo vam odjeljku pokazati kako ispraviti ovu pogrešku i ispraviti kôd.

Razlog greške br. 1 - različita imena varijabli

Jedan od glavnih razloga za dobivanje ove pogreške u programu Excel VBA posljedica je različitih varijabli proslijeđenih u dva postupka. Na primjer, pogledajte donje kodove.

Kodirati:

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

U Macro1 smo koristili varijablu „A“, a u Macro2 varijablu „B“. Ako pokušate pokrenuti kôd, dobit ćemo VBA pogrešku kao "Nepodudaranje tipa argumenta ByRef".

Kao što vidite gore, varijabla "B" je istaknuta jer je vrsta naziva varijable neusklađena.

Rješenje: Da bismo prevladali ovaj problem, moramo biti sigurni da su imena varijabli u oba postupka točna.

Razlog pogreške 2: Različite vrste varijabilnih podataka

Iako su imena varijabli ista, ipak uzrokuje pogrešku, to je zbog tipa podataka koji im dodjeljujemo. Pogledajte donji kod.

Kodirati:

Podmakronaredba1 () Zatamni kao cjelina A = 50 Makro2 A MsgBox A Kraj Podmakronaredba Makro2 (ByRef A Koliko dugo) A = A * 10 Krajnja podmakro

U gornjim kodovima proglasio sam varijablu "A" kao Integer tip podataka u Macro1, a u Macro2 istoj varijabli dodijeljen je tip podataka kao "Long".

Kada pokrenemo ovaj kôd, uzrokovat će VBA pogrešku "ByRef Argument Type Mismatch."

To je zato što smo za isti naziv varijable dodijelili dvije različite vrste podataka.

Rješenje: Tip podataka trebao bi biti jednak u oba postupka.

Razlog pogreške 3: Vrste varijabilnih podataka nedostaju u jednoj makronaredbi

Pogreška programa Excel VBA, „Nepodudaranje tipa argumenta ByRef“, mogla bi se dogoditi zbog tipa podataka dodijeljenog u jednoj, a ne u drugoj makronaredbi.

Kodirati:

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

U gore navedenom kodu Macro1 nisam deklarirao nijednu varijablu, već sam joj jednostavno dodijelio vrijednost.

On the other hand, for Macro2, I have declared the variable “A” as long. If you try running this code, it will cause the “ByRef Argument Type Mismatch” VBA Error.

Solution1: To avoid these kinds of situations, the first solution is to declare the variable in both the procedures and assign the same data type.

Solution2: An alternative solution is to make the variable declaration mandatory by adding the “Option Explicit” word at the top of the module.

What this will do is that before it shows VBA “ByRef Argument Type Mismatch,” Error, it actually asks us to declare the variable first.

So, Option Explicit always comes in handy in VBA.

Things to Remember

  • ByRef is the opposite of By Val.
  • ByRef carries the reference from one procedure to another.
  • The variable name, data type should be the same in both the procedures.
  • Svaka varijabla treba biti deklarirana odvojeno u slučaju više varijabli.

Zanimljivi članci...