VBA ByRef Argumenttype Mismatch Error - Top 3 årsager og fejlrettelser

ByRef Argument Type Mismatch i Excel VBA

I denne artikel forklarer vi den fejl, der opstod, mens du bruger Excel VBA ByRef som "Argument Type Mismatch Error." Før det, lad mig introducere dig til “By Ref” først. Variabler er nøglen til ethvert programmeringssprog, og VBA er heller ikke anderledes. Vi har set mange måder at erklære variabler på. En sådan måde at erklære variabler på er ved at bruge ordene "ByRef" og "ByVal."

Hvad betyder ByRef?

"ByRef" betyder "Ved henvisning" ved hjælp af dette ord, vi kan faktisk videregive argumenter til procedurer (for både under & funktion) som reference. Dette er i modsætning til sin bror "By Val", som ikke er fleksibel, men fast i naturen.

For at forstå dette, lad os se på nedenstående to makroer.

Kode:

Sub Makro1 () Dim A så længe A = 50 Makro2 A MsgBox A End Sub Sub Makro2 (ByRef A så længe) A = A * 10 End Sub

Vi har to underprocedurer, der hedder henholdsvis Macro1 og Macro2. For at forstå dette bedre skal du køre makroen linje for linje ved at trykke på F8-tasten.

Tryk på F8-tasten for at indfange værdien af ​​variablen “A” som 50.

Den næste linje med kode siger "Macro2 A", dvs. navnet på den anden makro og "A" er den variabel, der er defineret gennem "Af Ref" -ordet.

Som du kan se ovenfor, i det øjeblik vi udfører linjen med kode "Macro2 A", er den sprunget til den næste VBA-underprocedure fra ovenstående procedure.

Nu kan vi se værdien af ​​variablen “A” er 50. Dette skyldes, at da vi har brugt ordet “ByRef” til at erklære variablen “A”, som er den samme som i Makro1, har den fanget den værdi, vi har tildelt denne variabel “A” fra Macro1 .

Nu siger ligningen i denne makro ( Makro2 ) A = A * 10, dvs. A = 50 * 100. Tryk på F8-tasten 3 gange for at gå tilbage til ovenstående makro ( Makro1 ).

Tryk nu endnu en gang på F8-tasten for at se værdien af ​​variablen “A” i meddelelsesboksen i VBA.

Værdien siger 500.

Selvom den værdi, vi har tildelt i denne makro (Macro1), er 50, ved hjælp af ByRef-ordet, udløste vi faktisk Macro2-delproceduren ved at beholde værdien af ​​variablen “A” fra Macro1 og derefter udføre værdien af ​​A ved at multiplicere 10.

Top 3 årsager til VBA Byref Argument Type Mismatch

Ovenfor har vi set, hvordan “ByRef” fungerer, men vi er nødt til at lave nogle af de fejl, som altid resulterede i at kaste en VBA-fejlmeddelelse som “ByRef Argument Type Mismatch.”

Dette skyldes mange årsager, og i dette afsnit viser vi dig, hvordan du retter denne fejl og debug koden.

Fejlårsag nr. 1 - forskellige variabelnavne

En af hovedårsagerne til at få denne fejl i Excel VBA skyldes forskellige variabler, der er sendt i to procedurer. Se f.eks. Nedenstående koder.

Kode:

Sub Makro1 () Dim A Så længe A = 50 Makro2 B MsgBox A End Sub Sub Makro2 (ByRef A Så længe) B = B * 10 End Sub

I Macro1 har vi brugt “A” -variablen, og i Macro2 har vi brugt “B” -variablen. Hvis du forsøger at køre koden, får vi VBA-fejl som "ByRef Argument Type Mismatch."

Som du kan se ovenfor er variabel “B” fremhævet, fordi typen af ​​variabelnavn ikke stemmer overens.

Løsning: For at løse dette problem skal vi sørge for, at variabelnavne i begge procedurer er nøjagtige.

Fejl Årsag 2: Forskellige variable datatyper

Selvom variabelnavne er de samme, forårsager det stadig en fejl, det er på grund af den datatype, vi tildeler dem. Se på nedenstående kode.

Kode:

Sub Makro1 () Dim A som heltal A = 50 Makro2 A MsgBox A End Sub Sub Makro2 (ByRef A så længe) A = A * 10 End Sub

I ovenstående koder har jeg erklæret variabel “A” som heltal datatype i Makro1, og i Makro2 blev samme variabel tildelt datatypen som “Lang”.

Når vi kører denne kode, vil det medføre en VBA-fejl "ByRef Argument Type Mismatch."

Dette skyldes, at vi har tildelt to forskellige datatyper til det samme variabelnavn.

Løsning: Datatypen skal være den samme i begge procedurer.

Fejl Årsag 3: Variable datatyper mangler i en makro

Excel VBA-fejlen, "ByRef Argument Type Mismatch", kan ske på grund af datatype tildelt i en makro og ikke tildelt i en anden makro.

Kode:

Sub Makro1 () A = 50 Makro2 A MsgBox A End Sub Sub Makro2 (ByRef A Så længe) A = A * 10 End Sub

I ovenstående kode for Macro1 har jeg ikke erklæret nogen variabel, snarere blot tildelt værdien til variablen.

På den anden side har jeg for Macro2 erklæret variablen "A" så længe. Hvis du prøver at køre denne kode, vil det medføre VBA-fejlen “ByRef Argument Type Mismatch”.

Løsning1: For at undgå denne slags situationer er den første løsning at erklære variablen i begge procedurer og tildele den samme datatype.

Løsning2: En alternativ løsning er at gøre variabelerklæringen obligatorisk ved at tilføje "Option Explicit" ordet øverst i modulet.

Hvad dette vil gøre er, at før det viser VBA “ByRef Argument Type Mismatch,” Fejl, beder det os faktisk om at erklære variablen først.

Så Option Explicit kommer altid godt med i VBA.

Ting at huske

  • ByRef er det modsatte af By Val.
  • ByRef fører henvisningen fra en procedure til en anden.
  • Variabelnavnet, datatypen skal være den samme i begge procedurer.
  • Hver variabel skal deklareres separat i tilfælde af flere variabler.

Interessante artikler...