VBA ByRef Argumenttyp Felaktig matchning - Topp 3 orsaker och felkorrigeringar

ByRef Argumenttyp Mismatch i Excel VBA

I den här artikeln förklarar vi felet som uppstod när du använde Excel VBA ByRef som ”Fel i felaktig argumenttyp.” Innan det, låt mig först presentera dig för “By Ref”. Variabler är nyckeln till alla programmeringsspråk, och VBA är inte heller annorlunda. Vi har sett många sätt att deklarera variabler. Ett sådant sätt att deklarera variabler är att använda orden "ByRef" och "ByVal."

Vad betyder ByRef?

"ByRef" betyder "med referens" med detta ord, vi kan faktiskt skicka argument till procedurer (för både sub & funktion) genom referens. Detta skiljer sig från sin bror "By Val", som inte är flexibel men fast i naturen.

För att förstå detta, låt oss ta en titt på nedanstående två makron.

Koda:

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

Vi har två delprocedurer här med namnet Macro1 respektive Macro2. För att förstå detta bättre, kör makrot rad för rad genom att trycka på F8-tangenten.

Tryck på F8-tangenten för att fånga värdet för variabeln "A" som 50.

Nästa kodrad säger "Macro2 A", dvs namnet på det andra makrot och "A" är variabeln som definieras genom "By Ref" -ordet.

Som du kan se ovan har det ögonblicket vi kör koden "Macro2 A" hoppat till nästa VBA-underprocedur från ovanstående procedur.

Nu kan vi se att värdet på variabeln "A" är 50. Detta beror på att eftersom vi har använt ordet "ByRef" för att deklarera variabeln "A", vilket är detsamma som i Macro1, har det fångat upp det värde vi har tilldelas denna variabel "A" från Macro1 .

Nu i ekvationen i detta makro ( Macro2 ) står A = A * 10, dvs. A = 50 * 100. Tryck på F8-tangenten tre gånger för att gå tillbaka till ovanstående makro ( Macro1 ).

Tryck nu en gång till på F8-tangenten för att se värdet på variabeln "A" i meddelandefältet i VBA.

Värdet säger 500.

Även om värdet vi har tilldelat i detta makro (Macro1) är 50, med hjälp av ByRef-ordet, utlöste vi faktiskt Macro2-delprocessen genom att behålla värdet på variabeln "A" från Macro1 och sedan utföra värdet A genom att multiplicera 10.

Topp 3 skäl till VBA Byref Argumenttyp Mismatch

Ovan har vi sett hur "ByRef" fungerar, men vi måste göra några av de misstag som alltid resulterade i att ett VBA-felmeddelande kastades som "ByRef Argument Type Mismatch."

Det beror på många anledningar och i det här avsnittet visar vi dig hur du åtgärdar detta fel och felsöker koden.

Fel Orsak nr 1 - Olika variabla namn

En av de främsta anledningarna till att få detta fel i Excel VBA beror på olika variabler som skickats i två procedurer. Titta till exempel på nedanstående koder.

Koda:

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

I Macro1 har vi använt variabeln "A" och i Macro2 har vi använt variabeln "B". Nu, om du försöker köra koden, får vi VBA-fel som "ByRef Argument Type Mismatch."

Som du kan se ovan har variabel "B" markerats eftersom typen av variabelnamn är en oöverensstämmelse.

Lösning: För att lösa problemet måste vi se till att variabla namn i båda procedurerna är exakta.

Fel Orsak 2: Olika variabla datatyper

Även om variabla namn är desamma, orsakar det fortfarande ett fel, det beror på datatypen vi tilldelar dem. Titta på koden nedan.

Koda:

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

I ovanstående koder har jag förklarat variabel "A" som heltaldatatyp i Macro1, och i Macro2 tilldelades samma variabel datatypen "Long".

När vi kör den här koden kommer det att orsaka ett VBA-fel "ByRef Argument Type Mismatch."

Detta beror på att vi har tilldelat två olika datatyper för samma variabelnamn.

Lösning: Datatypen bör vara densamma i båda procedurerna.

Fel Orsak 3: Variabla datatyper saknas i en makro

Excel VBA-fel, "ByRef Argument Type Mismatch", kan hända på grund av datatyp som tilldelats i ett makro och inte tilldelats i ett annat makro.

Koda:

Sub Macro1 () A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A Så länge) A = A * 10 End Sub

I ovanstående kod för Macro1 har jag inte förklarat någon variabel utan bara tilldelat värdet till variabeln.

Å andra sidan har jag för Macro2 förklarat variabeln "A" så länge. Om du försöker köra den här koden kommer det att orsaka VBA-felet ”ByRef Argument Type Mismatch”.

Lösning1: För att undvika den här typen av situationer är den första lösningen att deklarera variabeln i båda procedurerna och tilldela samma datatyp.

Lösning2: En alternativ lösning är att göra variabeldeklarationen obligatorisk genom att lägga till ordet “Option Explicit” högst upp i modulen.

Vad detta kommer att göra är att innan det visar VBA "ByRef Argument Type Mismatch," Error, ber det oss faktiskt att deklarera variabeln först.

Så, Option Explicit kommer alltid till nytta i VBA.

Saker att komma ihåg

  • ByRef är motsatsen till By Val.
  • ByRef bär referensen från ett förfarande till ett annat.
  • Variabelnamnet, datatypen ska vara densamma i båda procedurerna.
  • Varje variabel måste deklareras separat när det gäller flera variabler.

Intressanta artiklar...