Chyba nezhody typu argumentu VBA ByRef - Najlepšie 3 dôvody a opravy chýb

Nezhoda typu argumentu ByRef v Exceli VBA

V tomto článku vysvetľujeme chybu, ktorá sa vyskytla pri používaní aplikácie Excel VBA ByRef ako „Chyba nezhody typu argumentu“. Predtým vám najskôr predstavím „Od rozhodcu“. Premenné sú kľúčové pre akýkoľvek programovací jazyk a VBA sa tiež nelíši. Videli sme veľa spôsobov deklarovania premenných, jedným z takých spôsobov deklarovania premenných je použitie slov „ByRef“ a „ByVal“.

Čo znamená ByRef?

„ByRef“ znamená „Podľa odkazu“ pomocou tohto slova, v skutočnosti môžeme argumentom odovzdávať procedúry (pre pod a funkciu) pomocou odkazu. Je to na rozdiel od jeho brata „By Val“, ktorý nie je flexibilný, ale má pevnú povahu.

Aby sme tomu porozumeli, pozrime sa na nasledujúce dve makrá.

Kód:

Sub Macro1 () Dim A As Long A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Máme tu dva podprocesy s názvom Macro1 a Macro2. Aby ste tomu lepšie porozumeli, spustite makro riadok po riadku stlačením klávesu F8.

Stlačením klávesu F8 zaznamenáte hodnotu premennej „A“ ako 50.

Nasledujúci riadok kódu hovorí „Macro2 A“, tj. Názov druhého makra a „A“ je premenná definovaná slovom „By Ref“.

Ako vidíte vyššie, v okamihu, keď vykonáme riadok kódu „Macro2 A“, skočil na ďalší čiastkový postup VBA z vyššie uvedeného postupu.

Teraz vidíme, že hodnota premennej „A“ je 50. Je to preto, že keďže sme na deklaráciu premennej „A“ použili slovo „ByRef“, ktoré je rovnaké ako v makre 1, zachytilo hodnotu, ktorú máme tejto premennej „A“ priradenej z makra1 .

Teraz v tomto makre ( Macro2 ) hovorí rovnica A = A * 10, tj A = 50 * 100. Stlačením klávesu F8 trikrát sa vrátite k vyššie uvedenému makru ( Macro1 ).

Teraz stlačte ešte raz kláves F8, aby ste videli hodnotu premennej „A“ v okne správy vo VBA.

Hodnota hovorí 500.

Aj keď hodnota, ktorú sme tomuto makru (Macro1) priradili, je 50, použitím slova ByRef sme v skutočnosti spustili podproces Macro2 tak, že sme zachovali hodnotu premennej „A“ z makra 1 a potom vykonali hodnotu A vynásobením 10.

Najlepšie 3 dôvody nezhody typu argumentu VBA Byref

Vyššie sme videli, ako funguje „ByRef“, ale museli sme urobiť niekoľko chýb, ktoré vždy vyústili do zobrazenia chybovej správy VBA ako „Nesúlad typu argumentu ByRef“.

Je to z mnohých dôvodov a v tejto časti vám ukážeme, ako túto chybu opraviť a ladiť kód.

Dôvod chyby č. 1 - rôzne názvy premenných

Jedným z hlavných dôvodov získania tejto chyby v programe Excel VBA sú rôzne premenné odovzdané v dvoch postupoch. Napríklad si pozrite nasledujúce kódy.

Kód:

Sub Macro1 () Dim A As Long A = 50 Macro2 B MsgBox A End Sub Sub Macro2 (ByRef A As Long) B = B * 10 End Sub

V Macro1 sme použili premennú „A“ a v Macro2 sme použili premennú „B“. Teraz, ak sa pokúsite spustiť kód, zobrazí sa chyba VBA ako „Nesúlad typu argumentu ByRef“.

Ako vidíte vyššie, premenná „B“ bola zvýraznená, pretože typ názvu premennej je nesúlad.

Riešenie: Na prekonanie tohto problému sa musíme uistiť, že názvy premenných v obidvoch postupoch sú presné.

Dôvod chyby 2: Rôzne typy premenných údajov

Aj keď sú názvy premenných rovnaké, stále to spôsobuje chybu, je to kvôli dátovému typu, ktorý im priradíme. Pozrite sa na nasledujúci kód.

Kód:

Sub Macro1 () Dim A As Integer A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Vo vyššie uvedených kódoch som deklaroval premennú „A“ ako dátový typ Integer v Macro1 a v Macro2 tej istej premennej bol priradený dátový typ ako „Long“.

Keď spustíme tento kód, spôsobí to chybu VBA „Nesúlad typu ByRef Argument Type“.

Je to tak preto, lebo sme rovnakému názvu premennej priradili dva rôzne typy údajov.

Riešenie: Dátový typ by mal byť v oboch postupoch rovnaký.

Dôvod chyby 3: V jednom makre chýbajú variabilné typy údajov

Môže sa vyskytnúť chyba VBA programu Excel „Nesúlad typu argumentu ByRef“ z dôvodu dátového typu priradeného v jednom makre a nepriradeného v inom makre.

Kód:

Sub Macro1 () A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Vo vyššie uvedenom kóde Macro1 som nedeklaroval žiadnu premennú, ale jednoducho som jej priradil hodnotu.

Na druhej strane, pre Macro2 som premennú „A“ vyhlásil ako dlhú. Ak sa pokúsite spustiť tento kód, spôsobí to chybu VBA „ByRef Argument Type Mismatch“.

Riešenie 1: Aby sme sa vyhli takýmto situáciám, prvým riešením je deklarovať premennú v obidvoch postupoch a priradiť rovnaký dátový typ.

Riešenie 2: Alternatívnym riešením je zaviesť povinnú deklaráciu premennej pridaním slova „Option Explicit“ do hornej časti modulu.

Čo to urobí, je to, že predtým, ako sa zobrazí chyba VBA „ByRef Argument Type Mismatch“, chyba, nás vlastne požiada, aby sme najskôr deklarovali premennú.

Možnosť Explicit sa teda vo VBA vždy hodí.

Na čo treba pamätať

  • ByRef je opakom By By.
  • ByRef prenáša odkaz z jednej procedúry na druhú.
  • Názov premennej, dátový typ by mal byť v oboch postupoch rovnaký.
  • Každú premennú je potrebné deklarovať osobitne v prípade viacerých premenných.

Zaujímavé články...