VBA ByRef Argument Type Mismatch Error - Topp 3 årsaker og feilrettinger

ByRef Argument Type Mismatch i Excel VBA

I denne artikkelen forklarer vi feilen som oppstod under bruk av Excel VBA ByRef som "Argument Type Mismatch Error." Før det, la meg introdusere deg for “By Ref” først. Variabler er nøkkelen til ethvert programmeringsspråk, og VBA er heller ikke annerledes. Vi har sett mange måter å deklarere variabler på. En slik måte å erklære variabler på er å bruke ordene "ByRef" og "ByVal."

Hva betyr ByRef?

“ByRef” betyr “Ved referanse” ved å bruke dette ordet, vi kan faktisk sende argumenter til prosedyrer (for både sub & funksjon) ved referanse. Dette er i motsetning til broren "By Val", som ikke er fleksibel, men fast i naturen.

For å forstå dette, la oss ta en titt på nedenstående to makroer.

Kode:

Sub Makro1 () Dim A Så lenge A = 50 Makro2 A MsgBox A End Sub Sub Makro2 (ByRef A Så lenge) A = A * 10 End Sub

Vi har to underprosedyrer her kalt henholdsvis Macro1 og Macro2. For å forstå dette bedre, kjør makroen linje for linje ved å trykke på F8-tasten.

Trykk på F8-tasten for å fange verdien til variabelen “A” som 50.

Den neste kodelinjen sier "Macro2 A", dvs. navnet på den andre makroen og "A" er variabelen definert gjennom "By Ref" -ordet.

Som du kan se ovenfor, i det øyeblikket vi utfører linjen med kode "Macro2 A", har den hoppet til neste VBA-underprosedyre fra prosedyren ovenfor.

Nå kan vi se verdien av variabelen “A” er 50. Dette er fordi siden vi har brukt ordet “ByRef” for å erklære variabelen “A”, som er den samme som i Makro1, har den fanget verdien vi har tilordnet denne variabelen “A” fra Macro1 .

Nå i denne makroen ( Macro2 ) sier ligningen A = A * 10 dvs. A = 50 * 100. Trykk på F8-tasten 3 ganger for å gå tilbake til ovennevnte makro ( Macro1 ).

Trykk en gang til på F8-tasten for å se verdien av variabelen “A” i meldingsboksen i VBA.

Verdien sier 500.

Selv om verdien vi har tildelt i denne makroen (Macro1) er 50, ved å bruke ByRef-ordet, utløste vi faktisk Macro2-delprosedyren ved å beholde verdien av variabelen “A” fra Macro1 og deretter utføre verdien av A ved å multiplisere 10.

Topp 3 årsaker til VBA Byref Argument Type Mismatch

Ovenfor har vi sett hvordan “ByRef” fungerer, men vi er nødt til å gjøre noen av feilene som alltid resulterte i å kaste en VBA-feilmelding som “ByRef Argument Type Mismatch.”

Dette er av mange grunner, og i denne delen vil vi vise deg hvordan du kan rette opp denne feilen og feilsøke koden.

Feil Årsak nr. 1 - forskjellige variabelnavn

En av hovedårsakene bak å få denne feilen i Excel VBA skyldes forskjellige variabler som er sendt i to prosedyrer. Se for eksempel på kodene nedenfor.

Kode:

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

I Macro1 har vi brukt “A” -variabelen, og i Macro2 har vi brukt “B” -variabelen. Nå, hvis du prøver å kjøre koden, får vi VBA-feil som "ByRef Argument Type Mismatch."

Som du kan se ovenfor, har variabel “B” blitt uthevet fordi typen variabelnavn ikke stemmer overens.

Løsning: For å løse dette problemet, må vi sørge for at variabelnavn i begge prosedyrene er nøyaktig.

Feil Årsak 2: Ulike variabeltatatyper

Selv om variabelnavn er det samme, forårsaker det fortsatt en feil, dette er på grunn av datatypen vi tildeler dem. Se på koden nedenfor.

Kode:

Sub Makro1 () Dim A Som Heltall A = 50 Makro2 A MsgBox A End Sub Sub Macro2 (ByRef A Så lenge) A = A * 10 End Sub

I kodene ovenfor har jeg erklært variabelen "A" som heltal datatype i Macro1, og i Macro2 ble den samme variabelen tildelt datatypen som "Long."

Når vi kjører denne koden, vil det føre til en VBA-feil "ByRef Argument Type Mismatch."

Dette er fordi vi har tildelt to forskjellige datatyper for samme variabelnavn.

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

Feil Årsak 3: Variable datatyper mangler i en makro

Excel VBA-feilen, "ByRef Argument Type Mismatch", kan skje på grunn av datatypen tildelt i en makro og ikke tildelt i en annen makro.

Kode:

Sub Makro1 () A = 50 Makro2 A MsgBox A End Sub Sub Macro2 (ByRef A Så lenge) A = A * 10 End Sub

I den ovennevnte koden for Macro1 har jeg ikke erklært noen variabel, ganske enkelt tildelt verdien til variabelen.

På den annen side har jeg for Macro2 erklært variabelen “A” så lenge. Hvis du prøver å kjøre denne koden, vil den forårsake VBA-feilen “ByRef Argument Type Mismatch”.

Løsning1: For å unngå slike situasjoner, er den første løsningen å erklære variabelen i begge prosedyrene og tildele samme datatype.

Løsning2: En alternativ løsning er å gjøre variabelerklæringen obligatorisk ved å legge til “Option Explicit” -ordet øverst i modulen.

Hva dette vil gjøre er at før det viser VBA “ByRef Argument Type Mismatch,” Error, ber det oss faktisk om å erklære variabelen først.

Så, Option Explicit kommer alltid godt med i VBA.

Ting å huske

  • ByRef er det motsatte av By Val.
  • ByRef fører henvisningen fra en prosedyre til en annen.
  • Variabelnavnet, datatypen skal være den samme i begge prosedyrene.
  • Hver variabel må deklareres separat når det gjelder flere variabler.

Interessante artikler...