ВБА БиРеф Аргумент Типе Неусклађеност грешка | 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: Алтернатива решење је учинити декларацију променљиве обавезном додавањем речи „Експлицитно за опцију“ на врху модула.

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

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

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

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