Chyba neshody typu argumentu VBA ByRef - Nejlepší 3 důvody a opravy chyb

Neshoda typu argumentu ByRef v aplikaci Excel VBA

V tomto článku vysvětlíme chybu, ke které došlo při používání aplikace Excel VBA ByRef jako „Chyba neshody typu argumentu.“ Předtím vám nejprve představím „By Ref“. Proměnné jsou klíčem k jakémukoli programovacímu jazyku a VBA se také neliší. Viděli jsme mnoho způsobů deklarace proměnných, jedním z takových způsobů deklarace proměnných je použití slov „ByRef“ a „ByVal“.

Co znamená ByRef?

„ByRef“ znamená „By Reference“ pomocí tohoto slova, můžeme vlastně předat argumenty procedurám (pro sub i funkci) odkazem. To je na rozdíl od jeho bratra „By Val“, který není pružný, ale má pevnou povahu.

Abychom tomu porozuměli, podívejme se na níže uvedená dvě makra.

Kód:

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

Máme zde dva podprocesy s názvem Macro1 a Macro2. Abyste tomu lépe porozuměli, spusťte makro řádek po řádku stisknutím klávesy F8.

Stisknutím klávesy F8 zachytíte hodnotu proměnné „A“ jako 50.

Další řádek kódu říká „Macro2 A“, tj. Název druhého makra a „A“ je proměnná definovaná slovem „By Ref“.

Jak vidíte výše, v okamžiku, kdy provedeme řádek kódu „Macro2 A“, přeskočil na další dílčí postup VBA z výše uvedeného postupu.

Nyní vidíme, že hodnota proměnné „A“ je 50. Je to proto, že protože jsme k deklaraci proměnné „A“ použili slovo „ByRef“, které je stejné jako v Macro1, zachytilo hodnotu, kterou máme této proměnné „A“ přiřazené z makra1 .

Nyní v tomto makru ( Macro2 ) rovnice říká A = A * 10, tj. A = 50 * 100. Stiskněte třikrát klávesu F8 pro návrat k výše uvedenému makru ( Macro1 ).

Nyní stiskněte ještě jednou klávesu F8, abyste viděli hodnotu proměnné „A“ v okně se zprávou ve VBA.

Hodnota říká 500.

I když hodnota, kterou jsme tomuto makru (Macro1) přiřadili, je 50, použitím slova ByRef jsme ve skutečnosti spustili podproces Macro2 tím, že jsme zachovali hodnotu proměnné „A“ z Macro1 a poté provedli hodnotu A vynásobením 10.

Nejdůležitější 3 důvody neshody typu argumentu VBA Byref Argument

Nahoře jsme viděli, jak „ByRef“ funguje, ale museli jsme udělat některé z chyb, které vždy vyústily ve vyhodení chybové zprávy VBA jako „Neshoda typu argumentu ByRef“.

Je to z mnoha důvodů a v této části vám ukážeme, jak tuto chybu opravit a ladit kód.

Důvod chyby č. 1 - různé názvy proměnných

Jedním z hlavních důvodů získání této chyby v aplikaci Excel VBA je způsobeno různými proměnnými předanými ve dvou postupech. Podívejte se například na níže uvedené kódy.

Kód:

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

V Macro1 jsme použili proměnnou „A“ a v Macro2 jsme použili proměnnou „B“. Nyní, pokud se pokusíte spustit kód, zobrazí se chyba VBA jako „Neshoda typu argumentu ByRef.“

Jak vidíte výše, proměnná „B“ byla zvýrazněna, protože typ názvu proměnné je neshoda.

Řešení: Abychom tento problém překonali, musíme se ujistit, že názvy proměnných v obou postupech jsou přesné.

Důvod chyby 2: Různé typy proměnných dat

I když jsou názvy proměnných stejné, stále to způsobí chybu, je to kvůli datovému typu, který jim přiřadíme. Podívejte se na níže uvedený kód.

Kód:

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

Ve výše uvedených kódech jsem deklaroval proměnnou „A“ jako datový typ Integer v Macro1 a v Macro2 byla stejné proměnné přiřazen datový typ jako „Long“.

Když spustíme tento kód, způsobí to chybu VBA „Neshoda typu argumentu ByRef.“

Je to proto, že jsme stejnému názvu proměnné přiřadili dva různé datové typy.

Řešení: Datový typ by měl být v obou postupech stejný.

Důvod chyby 3: V jednom makru chybí proměnné typy dat

Může dojít k chybě VBA aplikace Excel „Neshoda typu argumentu ByRef“ kvůli datovému typu přiřazenému v jednom makru a nepřiřazenému v jiném makru.

Kód:

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

Ve výše uvedeném kódu Macro1 jsem nedeklaroval žádnou proměnnou, ale jednoduše ji přiřadil hodnotě proměnné.

Na druhou stranu jsem pro Macro2 deklaroval proměnnou „A“ tak dlouho. Pokud se pokusíte spustit tento kód, způsobí to chybu VBA „Neshoda typu argumentu ByRef“.

Řešení 1: Abychom se těmto situacím vyhnuli, prvním řešením je deklarovat proměnnou v obou postupech a přiřadit stejný datový typ.

Řešení2: Alternativním řešením je učinit deklaraci proměnné povinnou přidáním slova „Option Explicit“ v horní části modulu.

Co to udělá, je to, že předtím, než se zobrazí chyba VBA „ByRef Argument Type Mismatch,“ Chyba, ve skutečnosti nás požádá, abychom nejprve deklarovali proměnnou.

Možnost Explicit se tedy ve VBA vždy hodí.

Věci k zapamatování

  • ByRef je opakem By Val.
  • ByRef přenáší odkaz z jedné procedury na druhou.
  • Název proměnné, datový typ by měl být v obou postupech stejný.
  • Každá proměnná musí být deklarována samostatně v případě více proměnných.

Zajímavé články...