Преглед садржаја
У овом чланку ћемо погледати проблеме са којима се можете суочити када користите прилагођене функције у својим радним свескама. Покушаћу да вам покажем шта их узрокује и како се лако могу решити.
Ево о чему ћемо разговарати:
Раније смо разговарали о томе шта прилагођена функција је, како је креирати и користити. Ако сматрате да морате унапред да освежите основно знање о УДФ-овима, направите паузу и погледајте мој претходни чланак.
Зашто се Екцел УДФ не израчунава поново?
Када унесете промене у ваше радне свеске, Екцел неће поново израчунати сваку формулу коју имате. Ажурираће резултате само за оне формуле које су повезане са измењеним ћелијама.
Али ово се односи на стандардне Екцел функције. Што се тиче прилагођених, Екцел не може да потврди ВБА код и да идентификује друге ћелије које такође могу утицати на резултат прилагођене функције. Због тога се ваша прилагођена формула можда неће променити када унесете измене у радну свеску.
Да бисте решили проблем, само ћете морати да користите наредбу Апплицатион.Волатиле . Погледајте следеће поглавље да бисте сазнали корак по корак упутства о томе како да га примените.
Променљиве у односу на непроменљиве прилагођене функције
Подразумевано, прилагођене функције у Екцел-у нису променљиве. То значи да се УДФ поново израчунава само ако се промени вредност било које ћелије на коју се односи. Али ако је формат ћелија, имерадни лист, име датотеке се промени, онда се неће десити никакве промене у УДФ-у.
Пређимо са речи на примере. На пример, морате да запишете име своје радне свеске у ћелију. Да бисте то урадили, креирате прилагођену функцију:
Фунцтион ВоркбоокНаме() Ас Стринг ВоркбоокНаме = ТхисВоркбоок.Наме Енд Фунцтион
Сада замислите следећи случај. Написали сте прилагођену формулу =ВоркбоокНаме() у ћелију и тамо добили назив датотеке. Ускоро сте одлучили да преименујете датотеку и сачували сте је под другим именом. Али погледате вредност у ћелији и видите да се није променила. Још увек постоји старо име датотеке које више није исправно.
Пошто у овој функцији нема аргумената, функција се не израчунава поново (чак и ако промените име радне свеске, затворите је, а затим поново отворите ит).
Напомена. Да бисте поново израчунали све функције у датотеци, можете користити пречицу Цтрл + Алт + Ф9.
Да ли постоји лакши начин? Да би се формула поново израчунавала сваки пут када се радни лист промени, потребна вам је додатна линија кода. Налепите следећи део кода на почетак функције:
Апплицатион.Волатиле
Дакле, ваш код ће изгледати овако:
Функција ВоркбоокНаме() Ас Стринг Апплицатион.Волатиле ВоркбоокНаме = ТхисВоркбоок.Наме Енд Фунцтион
Сада је ваш УДФ несталан, па ће се аутоматски поново израчунати ако било која ћелија на радном листује прерачунато или је дошло до било какве промене у радној свесци. Чим промените име датотеке, видећете то ажурирање одмах.
Напомена. Имајте на уму да превише променљивих функција може успорити ваш Екцел. На крају крајева, постоји превише прилагођених функција које обављају сложене прорачуне и непрекидно раде на великим опсезима података.
Због тога, препоручујем да користите волатилност само тамо где је заиста потребна.
Зашто прилагођене функције нису доступне
Када унесете прва слова имена прилагођене функције, појављује се у падајућој листи поред ћелије за унос, баш као и стандардне Екцел функције.
Међутим, то се не дешава увек. Које грешке могу изазвати ову ситуацију?
Ако имате Екцел 2003-2007, УДФ се никада не појављује на падајућој листи. Тамо можете видети само стандардне функције.
Али чак и ако користите новију верзију Екцел-а, постоји још једна грешка коју можете случајно направити.
Видите, прилагођена функција мора бити у стандардни ВБА модул који се зове Модули. Када додате нови модул за писање кода функције, аутоматски се креира директоријум Модули у који су уписани сви модули.
Али понекад се деси да нови модул није стварањем. На следећем снимку екрана можете видети да се код прилагођене функције налази у модулу „Мицрософт Екцел Објецтс“ заједно саОва радна свеска.
Поента је да не можете поставити прилагођену функцију у област кода радног листа или радне свеске. У овом случају, функција неће радити. Штавише, неће се појавити на падајућој листи функција. Због тога би код увек требало да буде у фасцикли Модули .
Текст помоћи за прилагођену Екцел функцију се не приказује
Још један проблем може да се појави је наговештај који видите када налепите прилагођену функцију. Ако користите стандардну функцију, увек ћете видети објашњење за функцију и њене аргументе. Али шта је са УДФ-овима?
Ако имате много прилагођених функција, биће вам изузетно тешко да запамтите које прорачуне свака од њих обавља. Биће још теже запамтити које аргументе користити. Мислим да би била добра идеја да имате опис ваших прилагођених функција као подсетник.
За ово, предлажем да користите метод Апплицатион.МацроОптионс . Помоћи ће вам да прикажете опис не само функције већ и сваког од њених аргумената у прозору чаробњака за функције. Видећете овај прозор када кликнете на дугме Фк у траци формуле.
Хајде да видимо како да додате такав наговештај својим УДФ-овима. У претходном чланку смо погледали прилагођену функцију ГетМакБетвеен. Проналази максимални број у наведеном опсегу и узима три аргумента: опсег нумеричких вредности и максималну и минималну вредност затражи.
Сада ћемо додати опис за ову прилагођену функцију. Да бисте то урадили, креирајте и покрените команду Апплицатион.МацроОптионс . За функцију ГетМакБетвеен , можете покренути следећу команду:
Суб РегистерУДФ () Дим стрФунцНаме Ас Стринг 'име функције коју желите да региструјете Дим стрДесцр Ас Стринг ' опис функције сама Дим стрАргс () Ас Стринг 'опис аргумената функције ' Региструјте ГетМакБетвеен функцију РеДим стрАргс (1 до 3) 'Број аргумената у вашој функцији стрФунцНаме = "ГетМакБетвеен" стрДесцр = "Максимални број у наведеном опсегу" стрАргс (1) = "Распон нумеричких вредности" стрАргс (2) = "Доња граница интервала " стрАргс (3) = " Горња граница интервала " Апплицатион.МацроОптионс Макро: = стрФунцНаме, _ Опис: = стрДесцр, _ Описи аргумената: = стрАргс, _ Категорија: = " Моје прилагођене функције " Енд Суб
или
Суб РегистерУДФ () Апплицатион.МацроОптионс Мацро: = "ГетМакБетвеен" , _ Опис: = "Максимални број у наведеном опсегу" , _ Категорија: = "Мој Прилагођене функције" , _ АргументДесцриптионс: = Низ (_ "Распон нумеричких вредности" , _ "Доњи интервал бор дер" , _ "Горња граница интервала" ) Енд СубВариабле стр ФунцНаме је име функције. стрДесцр - опис функције. Променљиве стрАргс садрже наговештаје за сваки аргумент.
Можете се запитати који је четврти аргумент заАпплицатион.МацроОптионс. Овај опциони аргумент се зове Категорија и указује на класу Екцел функција у коју ће бити смештена наша прилагођена функција ГетМакБетвеен () . Можете је назвати по било којој од постојећих категорија: Математика &амп ; Триг, Статистицал, Логицал, итд. Можете одредити име за нову категорију у коју ћете поставити функције које креирате. Ако не користите аргумент Цатегори, прилагођена функција ће аутоматски бити стављена у категорију „Кориснички дефинисано“.
Налепите код функције у прозор модула:
Затим кликните на дугме „Покрени“. Команда ће извршити сва подешавања за коришћење дугмета Фк са вашом функцијом ГетМакБетвеен() .
Ако покушате да уметнете функцију у ћелију помоћу Инсерт Фунцтион алат, видећете да се ваша ГетМакБетвеен функција налази у категорији „Моје прилагођене функције“:
Ви можете једноставно почети да куцате име функције у ћелију и видећете своју прилагођену функцију на падајућој листи функција које можете изабрати.
Затим позовите Чаробњак за функције помоћу дугмета Фк.
Савет. Такође можете користити комбинацију тастера ЦРТЛ + А да отворите чаробњак за функције.
У прозору Чаробњак функција видећете опис своје функције, као и наговештај за први аргумент. Ако поставите курсор прекодруги или трећи аргумент, видећете и савете за њих.
Ако желите да промените текст ових савета, промените вредности стрДесцр и стрАргс променљиве у коду РегистерУДФ () . Затим поново покрените команду РегистерУДФ () .
Ако желите да поништите сва направљена подешавања и обришете опис функције, покрените овај код:
Суб УнрегистерУДФ () Апплицатион.МацроОптионс Макро: = "ГетМакБетвеен" , _ Опис: = Емпти , АргументДесцриптионс: = Емпти , Категорија: = Емпти Енд Суб
Постоји још један начин да добијете наговештај када унесете прилагођену функцију. Унесите име функције, а затим притисните Цтрл + Схифт + А :
=GetMaxBetween(
+ Цтрл + Схифт + А
Видећете листу свих аргумената функције:
Нажалост, овде нећете видети опис функције и њене аргументе. Али ако су имена аргумената прилично информативна, па би и они могли бити од помоћи. Ипак, боље је него ништа :)
Биће потребно мало више труда да се направи интеллисенсе за УДФ-ове који раде као стандардне Екцел функције. Нажалост, Мицрософт не нуди никакве опције. Тренутно једино доступно решење је екстензија Екцел-ДНА ИнтеллиСенсе. Више информација можете пронаћи на веб локацији програмера.
Надајмо се да ће вам ове смернице помоћи да решите проблеме када ваша прилагођена функција не ради или нерадите како желите. Међутим, ако ваш УДФ и даље не функционише, молимо вас да тачно опишете свој проблем у одељку Коментари. Покушаћемо да то схватимо и пронађемо решење за вас ;)