ВБА БиРеф Аргумент Типе Неусклађеност грешка - 3 главна разлога и исправци грешака

Неусаглашеност типа аргумента БиРеф у програму Екцел ВБА

У овом чланку објашњавамо грешку до које је дошло приликом коришћења Екцел ВБА БиРеф као „Грешка неусаглашавања типа аргумента“. Пре тога, дозволите ми да вас прво упознам са „Би Реф“. Варијабле су кључне за било који програмски језик, а ни ВБА се не разликује. Видели смо много начина декларисања променљивих. Један такав начин декларисања променљивих је коришћење речи „БиРеф“ и „БиВал“.

Шта значи БиРеф?

„БиРеф“ значи „према референци“ користећи ову реч, заправо можемо проследити аргументе процедурама (и за под и функцију) референцом. Ово је за разлику од његовог брата „Би Вал“, који није флексибилан, већ је фиксне природе.

Да бисмо ово разумели, погледајмо доња два макронаредбе.

Шифра:

Суб Мацро1 () Дим А Ас Лонг А = 50 Мацро2 А МсгБок А Енд Суб Суб Мацро2 (БиРеф А Ас Лонг) А = А * 10 Енд Суб

Овде имамо два потпроцедура под називом Мацро1 и Мацро2, респективно. Да бисте ово боље разумели, покрените макро линију по линију притиском на тастер Ф8.

Притисните тастер Ф8 да бисте вредност променљиве „А“ забележили као 50.

Следећи ред кода каже „Мацро2 А“, тј. Назив другог макроа и „А“ је променљива дефинисана речју „Би Реф“.

Као што видите горе, оног тренутка када извршимо линију кода „Мацро2 А“, она је прешла на следећу ВБА потпроцедуру из горње процедуре.

Сада можемо видети да је вредност променљиве „А“ 50. То је зато што, пошто смо користили реч „БиРеф“ да бисмо декларисали променљиву „А“, која је иста као у Макро1, она је забележила вредност коју имамо додељена овој променљивој „А“ из Макро1 .

Сада у овој макронаредби ( Мацро2 ) једначина каже А = А * 10 тј. А = 50 * 100. Притисните тастер Ф8 3 пута да бисте се вратили на горњи макро ( Мацро1 ).

Сада притисните још једном тастер Ф8 да бисте видели вредност променљиве „А“ у оквиру за поруке у ВБА.

Вредност каже 500.

Иако је вредност коју смо доделили у овом макрону (Мацро1) 50, користећи реч БиРеф, заправо смо покренули подпроцес Мацро2 задржавањем вредности променљиве „А“ из Мацро1, а затим извршавањем вредности А множењем 10.

Три главна разлога за неусаглашеност типа аргумента ВБА Биреф

Изнад смо видели како функционише „БиРеф“, али смо обавезно направили неке грешке које су увек резултирале избацивањем ВБА поруке о грешци као „БиРеф Аргумент Типе Мисматцх“.

То је због многих разлога, а у овом одељку ћемо вам показати како да исправите ову грешку и отклоните грешке у коду.

Разлог грешке бр. 1 - различита имена променљивих

Један од главних разлога за добијање ове грешке у програму Екцел ВБА је због различитих променљивих прослеђених у две процедуре. На пример, погледајте доленаведене кодове.

Шифра:

Подмакро 1 () Дим А докле А = 50 Макро2 Б МсгБок А Крај Подмакро Макро2 (БиРеф А Дуг) Б = Б * 10 Крај Суб

У Макро1 смо користили променљиву „А“, а у Макро2 променљиву „Б“. Ако покушате да покренете код, добићемо ВБА грешку као „Неподударање типа аргумента БиРеф“.

Као што видите горе, променљива „Б“ је истакнута јер је тип имена променљиве неусклађен.

Решење: Да бисмо превазишли овај проблем, морамо бити сигурни да су имена променљивих у оба поступка тачна.

Разлог грешке 2: Различити типови података са променљивом

Иако су имена променљивих иста, ипак то узрокује грешку, то је због типа података који им додељујемо. Погледајте доњи код.

Шифра:

Подмакро 1 () Затамни као целобројно А = 50 Макро2 А МсгБок А Крај Потпуни подмакро 2 (БиРеф А Колико дуго) А = А * 10 Крајњи пот

У горњим кодовима прогласио сам променљиву „А“ као целобројни тип података у Макро1, а у Макро2 истој променљивој је додељен тип података као „Дугачки“.

Када покренемо овај код, изазваће ВБА грешку „БиРеф Аргумент Типе Мисматцх“.

То је зато што смо за исто име променљиве доделили два различита типа података.

Решење: Тип података треба да буде исти у оба поступка.

Разлог грешке 3: Недостају променљиви типови података у једном макроу

Екцел ВБА грешка, „Неподударање типа аргумента БиРеф“, могла би се догодити због типа података додељеног у једном, а не у другом макроу.

Шифра:

Суб Мацро1 () А = 50 Мацро2 А МсгБок А Енд Суб Суб Мацро2 (БиРеф А Ас Лонг) А = А * 10 Енд Суб

У горе наведеном коду Мацро1 нисам прогласио ниједну променљиву, већ сам јој једноставно доделио вредност.

С друге стране, за Мацро2 сам прогласио променљиву „А“ толико дуго. Ако покушате да покренете овај код, то ће проузроковати ВБА грешку „БиРеф Аргумент Типе Мисматцх“.

Решење 1: Да бисте избегли овакве ситуације, прво решење је декларисање променљиве у оба поступка и додељивање истог типа података.

Решење 2: Алтернативно решење је учинити декларацију променљиве обавезном додавањем речи „Експлицитно за опцију“ на врху модула.

Ово што ће урадити је да пре него што покаже грешку ВБА „БиРеф Аргумент Типе Мисматцх“, заправо затражи да прво пријавимо променљиву.

Дакле, Оптион Екплицит увек добро дође у ВБА.

Ствари које треба запамтити

  • БиРеф је супротно од Би Вал.
  • БиРеф преноси референцу из једног поступка у други.
  • Име променљиве, тип података требало би да буде исто у оба поступка.
  • Свака променљива мора бити декларисана одвојено у случају више променљивих.

Занимљиви Чланци...