Eroare de nepotrivire a argumentului VBA ByRef - Top 3 motive și remedieri ale erorilor

ByRef Argument de tip nepotrivire în Excel VBA

În acest articol, explicăm eroarea întâlnită în timpul utilizării Excel VBA ByRef ca „Eroare de nepotrivire a tipului de argument”. Înainte de asta, permiteți-mi să vă prezint mai întâi „Prin referință”. Variabilele sunt cheia oricărui limbaj de programare și nici VBA nu este diferit. Am văzut multe modalități de declarare a variabilelor, un astfel de mod de declarare a variabilelor este prin utilizarea cuvintelor „ByRef” și „ByVal”.

Ce înseamnă ByRef?

„ByRef” înseamnă „Prin referință” folosind acest cuvânt, putem transmite argumentele procedurilor (pentru ambele sub și funcții) prin referință. Acest lucru este diferit de fratele său „By Val”, care nu este flexibil, ci are o natură fixă.

Pentru a înțelege acest lucru, să aruncăm o privire asupra celor două macro-uri de mai jos.

Cod:

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

Aici avem două subproceduri numite Macro1 și respectiv Macro2. Pentru a înțelege mai bine acest lucru, rulați macro linie cu linie apăsând tasta F8.

Apăsați tasta F8 pentru a capta valoarea variabilei „A” ca 50.

Următoarea linie de cod spune „Macro2 A”, adică numele celei de-a doua macrocomenzi și „A” este variabila definită prin cuvântul „By Ref”.

După cum puteți vedea mai sus, în momentul în care executăm linia de cod „Macro2 A”, a trecut la următoarea sub-procedură VBA din procedura de mai sus.

Acum putem vedea că valoarea variabilei „A” este 50. Acest lucru se datorează faptului că, deoarece am folosit cuvântul „ByRef” pentru a declara variabila „A”, care este aceeași ca în Macro1, a captat valoarea pe care o avem atribuit acestei variabile „A” din Macro1 .

Acum, în această macro ( Macro2 ) ecuația spune A = A * 10 adică A = 50 * 100. Apăsați tasta F8 de 3 ori pentru a reveni la macro-ul de mai sus ( Macro1 ).

Apăsați încă o dată tasta F8 pentru a vedea valoarea variabilei „A” în caseta de mesaj din VBA.

Valoarea spune 500.

Chiar dacă valoarea pe care am atribuit-o în această macro (Macro1) este 50, folosind cuvântul ByRef, am declanșat de fapt subprocederea Macro2 prin păstrarea valorii variabilei „A” din Macro1 și apoi executarea valorii lui A prin înmulțirea 10.

Top 3 motive pentru nepotrivirea tipului de argument VBA Byref

Mai sus, am văzut cum funcționează „ByRef”, dar suntem nevoiți să facem unele dintre greșelile care au dus invariabil la aruncarea unui mesaj de eroare VBA sub denumirea „ByRef Argument Type Mismatch”.

Acest lucru se datorează multor motive și, în această secțiune, vă vom arăta cum să remediați această eroare și să depanați codul.

Motivul de eroare # 1 - nume variabile diferite

Unul dintre principalele motive care stau la baza acestei erori în Excel VBA se datorează variabilelor diferite trecute în două proceduri. De exemplu, uitați-vă la codurile de mai jos.

Cod:

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

În Macro1, am folosit variabila „A”, iar în Macro2, am folosit variabila „B”. Acum, dacă încercați să rulați codul, vom primi o eroare VBA ca „ByRef Argument Type Mismatch”.

După cum puteți vedea mai sus, variabila „B” a fost evidențiată, deoarece tipul numelui variabilei este o nepotrivire.

Soluție: Pentru a depăși această problemă, trebuie să ne asigurăm că numele variabilelor din ambele proceduri sunt exacte.

Motivul de eroare 2: diferite tipuri de date variabile

Chiar dacă numele variabilelor sunt aceleași, totuși provoacă o eroare, acest lucru se datorează tipului de date pe care le-am atribuit acestora. Uită-te la codul de mai jos.

Cod:

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

În codurile de mai sus, am declarat variabila „A” ca tip de date întreg în Macro1, iar în Macro2 aceeași variabilă a primit tipul de date „Long”.

Când rulăm acest cod, va provoca o eroare VBA „ByRef Argument Type Mismatch”.

Acest lucru se datorează faptului că am atribuit două tipuri de date diferite pentru același nume de variabilă.

Soluție: tipul de date ar trebui să fie același în ambele proceduri.

Motivul de eroare 3: lipsesc tipurile de date variabile într-o singură macro

Eroarea Excel VBA, „ByRef Argument Type Mismatch”, s-ar putea întâmpla din cauza tipului de date atribuit într-o macrocomandă și neatribuit într-o altă macrocomandă.

Cod:

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

În codul de mai sus al Macro1, nu am declarat nicio variabilă, ci pur și simplu i-am atribuit valoarea variabilei.

Pe de altă parte, pentru Macro2, am declarat variabila „A” atât timp. Dacă încercați să rulați acest cod, va provoca eroarea VBA „ByRef Argument Type Mismatch”.

Soluția 1: Pentru a evita aceste tipuri de situații, prima soluție este declararea variabilei în ambele proceduri și atribuirea aceluiași tip de date.

Soluția 2: O soluție alternativă este de a face declarația variabilă obligatorie prin adăugarea cuvântului „Option Explicit” în partea de sus a modulului.

Ceea ce va face acest lucru este că, înainte de a afișa eroarea VBA „ByRef Argument Type Mismatch”, ne solicită să declarăm mai întâi variabila.

Deci, Option Explicit vine întotdeauna la îndemână în VBA.

Lucruri de amintit

  • ByRef este opusul lui By Val.
  • ByRef transportă referința de la o procedură la alta.
  • Numele variabilei, tipul de date ar trebui să fie același în ambele proceduri.
  • Fiecare variabilă trebuie declarată separat în cazul mai multor variabile.

Articole interesante...