VBA ByRef argumenta veida neatbilstības kļūda Top 3 iemesli un kļūdu labojumi

ByRef argumenta veida neatbilstība programmā Excel VBA

Šajā rakstā mēs izskaidrojam kļūdu, kas radusies, izmantojot Excel VBA ByRef kā “Argumenta tipa neatbilstības kļūda”. Pirms tam ļaujiet man vispirms jūs iepazīstināt ar “By Ref”. Mainīgie ir jebkura programmēšanas valodas atslēga, un arī VBA neatšķiras. Mēs esam redzējuši daudzus mainīgo deklarēšanas veidus. Viens no šiem mainīgo deklarēšanas veidiem ir vārdi “ByRef” un “ByVal”.

Ko nozīmē ByRef?

“ByRef” nozīmē “Ar atsauci”, izmantojot šo vārdu, mēs faktiski varam nodot argumentus procedūrām (abām apakšfunkcijām un funkcijām) ar atsauci. Tas atšķirībā no tā brāļa “By Val”, kurš nav elastīgs, bet fiksēts pēc būtības.

Lai to saprastu, apskatīsim zemāk redzamos divus makro.

Kods:

 Apakšmakro1 () Dim A tik ilgi, cik A = 50 Makro2 A MsgBox A Beigas Sub Sub makro2 (ByRef A tikpat ilgi) A = A * 10 End Sub 

Mums šeit ir divas apakškārtas, attiecīgi nosauktas par Macro1 un Macro2. Lai to saprastu, labāk palaidiet makro pa rindām, nospiežot taustiņu F8.

Nospiediet taustiņu F8, lai mainīgā “A” vērtību ierakstītu kā 50.

Nākamajā koda rindiņā ir rakstīts “Macro2 A”, ti, otrā makro nosaukums, un “A” ir mainīgais, kas definēts ar vārdu “By Ref”.

Kā redzat iepriekš brīdī, kad izpildām koda rindu “Macro2 A”, tā ir pārgājusi uz nākamo VBA apakšprocedūru no iepriekš minētās procedūras.

Tagad mēs varam redzēt, ka mainīgā “A” vērtība ir 50, tas ir tāpēc, ka, tā kā mēs esam lietojuši vārdu “ByRef”, lai deklarētu mainīgo “A”, kas ir tāds pats kā Macro1, tas ir uztvēris vērtību, ko esam piešķīruši šim mainīgajam “ A ”no Macro1 .

Tagad šajā makro ( Macro2 ) vienādojumā teikts: A = A * 10, ti, A = 50 * 100. Nospiediet taustiņu F8 trīs reizes, lai atgrieztos pie iepriekš minētā makro ( Macro1 ).

Tagad vēl vienu reizi nospiediet taustiņu F8, lai VBA ziņojumu lodziņā redzētu mainīgā “A” vērtību.

Vērtība saka 500.

Pat ja vērtība, kuru esam piešķīruši šajā makro (Macro1), ir 50, izmantojot ByRef vārdu, mēs faktiski aktivizējām Macro2 apakšprocedūru, saglabājot mainīgā “A” vērtību no Macro1 un pēc tam izpildot A vērtību, reizinot 10.

3 galvenie iemesli VBA Byref argumentu veida neatbilstībai

Iepriekš mēs esam redzējuši, kā darbojas “ByRef”, taču mums ir jāpieļauj dažas kļūdas, kuru dēļ vienmēr tika izmests VBA kļūdas ziņojums “ByRef Argument Type Mismatch”.

Tas ir daudzu iemeslu dēļ, un šajā sadaļā mēs parādīsim, kā novērst šo kļūdu un atkļūdot kodu.

Šo VBA ByRef argumenta veida neatbilstības veidni varat lejupielādēt šeit - VBA ByRef argumenta tipa neatbilstības veidni Excel veidne

Kļūda 1. iemesls - dažādi mainīgo nosaukumi

Viens no galvenajiem iemesliem šīs kļūdas iegūšanai programmā Excel VBA ir saistīts ar dažādiem mainīgajiem lielumiem, kas nodoti divās procedūrās. Piemēru skatiet zemāk esošajos kodos.

Kods:

 1. makro1 () Dim A tik ilgi, cik A = 50 Macro2 B MsgBox A Beigas Sub Sub Makro2 (ByRef A tikpat ilgi) B = B * 10 End Sub 

Macro1 mēs izmantojām mainīgo “A” un makro2 mainīgo “B”. Tagad, mēģinot palaist kodu, mēs saņemsim VBA kļūdu kā “ByRef argumenta veida neatbilstība”.

Kā redzat iepriekš, mainīgais “B” ir izcelts, jo mainīgā nosaukuma tips neatbilst.

Risinājums: Lai pārvarētu šo problēmu, mums jāpārliecinās, vai mainīgo nosaukumi abās procedūrās ir precīzi.

Kļūda 2. iemesls: dažādi mainīgo datu tipi

Kaut arī mainīgo nosaukumi ir vienādi, tas tomēr rada kļūdu, jo tas ir tāpēc, ka mēs viņiem piešķiram datu tipu. Apskatiet zemāk esošo kodu.

Kods:

 Apakšmakro1 () Dim A kā veselais skaitlis A = 50 makro2 A MsgBox A beigu apakšgrupa makro2 (ByRef A tik ilgi) A = A * 10 beigu apakšgrupa 

Iepriekš minētajos kodos mainīgo “A” esmu deklarējis kā veselo datu tipu Macro1, un Macro2 tam pašam mainīgajam tika piešķirts datu tips kā “Long”.

Kad palaidīsim šo kodu, tas izraisīs vba kļūdu “ByRef Argument Type Mismatch”.

Tas ir tāpēc, ka vienam un tam pašam mainīgā nosaukumam esam piešķīruši divus dažādus datu tipus.

Risinājums: datu tipam jābūt vienādam abās procedūrās.

Kļūda 3. iemesls: vienā makro trūkst mainīgo datu tipu

Excel VBA kļūda “ByRef argumenta veida neatbilstība” varētu notikt vienā makro piešķirto un citā makro nepiešķirto datu veida dēļ.

Kods:

 Apakšmakro1 () A = 50 makro2 A MsgBox A beigu apakšgrupa makro2 (ByRef A tik ilgi) A = A * 10 beigu apakšgrupa 

Iepriekš minētajā Macro1 kodā es neesmu deklarējis nevienu mainīgo, bet vienkārši tam piešķiru mainīgā vērtību.

No otras puses, attiecībā uz Macro2 mainīgo “A” esmu deklarējis tik ilgi. Mēģinot palaist šo kodu, tas izraisīs “ByRef Argument Type Mismatch” VBA kļūdu.

1. risinājums: lai izvairītos no šāda veida situācijām, pirmais risinājums ir deklarēt mainīgo abās procedūrās un piešķirt to pašu datu tipu.

2. risinājums: alternatīvs risinājums ir padarīt mainīgā deklarāciju obligātu, moduļa augšpusē pievienojot vārdu “Option Explicit”.

Tas darīs to, ka, pirms tiek parādīta VBA kļūda “ByRef Argument Type Mismatch”, tā vispirms lūdz mūs vispirms deklarēt mainīgo.

Tātad opcija Explicit vienmēr noder VBA.

Atceramās lietas

  • ByRef ir pretstats By Val.
  • ByRef nes atsauci no vienas procedūras uz otru.
  • Mainīgā nosaukumam, datu tipam abās procedūrās jābūt vienādiem.
  • Katrs mainīgais ir jādeklarē atsevišķi, ja ir vairāki mainīgie.

$config[zx-auto] not found$config[zx-overlay] not found