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”, kas 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 apakšmakro2 (ByRef A tik ilgi) A = A * 10 Beigas Sub

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

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

Nākamajā koda rindiņā teikts “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 mēs izpildām koda rindu “Macro2 A”, tas ir pāriet 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 izmantojām vārdu “ByRef”, lai deklarētu mainīgo “A”, kas ir tāds pats kā Macro1, tas ir uztvēris vērtību, kāda mums ir piešķirts š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 vārdu ByRef, 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 noteikti jāpieļauj dažas kļūdas, kuru dēļ vienmēr tika uzlikts VBA kļūdas ziņojums kā “ByRef argumenta veida neatbilstība”.

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

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

Viens no galvenajiem iemesliem, kāpēc šī kļūda tiek iegūta programmā Excel VBA, ir saistīts ar dažādiem mainīgajiem lielumiem, kas nodoti divās procedūrās. Piemēram, apskatiet zemāk redzamos kodus.

Kods:

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

Macro1 mēs izmantojām mainīgo “A”, bet makro2 - mainīgo “B”. Tagad, mēģinot palaist kodu, tiks parādīta VBA kļūda 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, ka mainīgo nosaukumi abās procedūrās ir precīzi.

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

Lai arī mainīgo nosaukumi ir vienādi, tas tomēr rada kļūdu, tas ir tāpēc, ka mums tiek piešķirts datu tips. 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ā Integer 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 argumenta veida neatbilstība”.

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 abās procedūrās jābūt vienādiem.

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

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 kļūda VBA “ByRef Argument Type Mismatch”, tā faktiski mūs vispirms lūdz paziņot par 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 vairāku mainīgo gadījumā jādeklarē atsevišķi.

Interesanti raksti...