Научите како да отклоните грешке у прилагођеним функцијама у Екцел-у

  • Деле Ово
Michael Brown

Пошто већ знате како да креирате УДФ-ове (и, надам се, такође сте покушали да их примените у свом Екцел-у), хајде да копамо мало дубље и видимо шта се може урадити у случају да ваша кориснички дефинисана функција не ради.

Да бисте решили неке проблеме приликом креирања прилагођене функције, највероватније ћете морати да покренете отклањање грешака. Тада можете бити сигурни да функција ради исправно.

Истражићемо следеће технике отклањања грешака:

    Када креирате прилагођену функцију, увек постоји могућност да ћеш погрешити. Прилагођене функције су обично прилично сложене. И не почињу увек да раде исправно одмах. Формула може да врати нетачан резултат или #ВРЕДНОСТ! грешка. За разлику од стандардних Екцел функција, нећете видети ниједну другу поруку.

    Да ли постоји начин да прођете кроз прилагођену функцију корак по корак да бисте проверили како свака од њених изјава функционише? Наравно! За ово се користи отклањање грешака.

    Понудићу вам неколико начина за отклањање грешака у вашој прилагођеној функцији како бисте могли да изаберете ону која вам одговара.

    Као пример, користимо прилагођену функцију ГетМакБетвеен из једног од наших претходних чланака који израчунава максималан број у наведеном опсегу вредности:

    Функција ГетМакБетвеен(рнгЦеллс Ас Ранге, МинНум, МакНум) Дим НумРанге Ас Ранге Дим вМак Дим аррНумс() Дим и Ас Интегер РеДим аррНумс(рнгЦеллс.Цоунт) за сваки НумРанге у рнгЦеллс вМак =НумРанге Изаберите случај вМак Цасе МинНум + 0,01 до МакНум - 0,01 аррНумс(и) = вМак и = и + 1 Цасе Елсе ГетМакБетвеен = 0 Крај Изаберите следећи НумРанге ГетМакБетвеен = ВорксхеетФунцтион.Мак(аррНумс) Аргументи функције Краја су

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

    Поставите функцију МсгБок на важна места

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

    МсгБок је оквир за дијалог који можете користити да прикажете неку врсту поруке кориснику.

    МсгБок-ова синтакса је сличан другим ВБА функцијама:

    МсгБок(промпт [, дугмад] [, наслов] [, датотека помоћи, контекст])

    промпт је обавезан аргумент. Садржи поруку коју видите у дијалогу. Такође се може користити за приказ вредности појединачних променљивих.

    Сви остали аргументи су опциони.

    [ дугмад ] - одређује која дугмад и иконе су приказано у МсгБок . На пример, ако користимо опцију вбОкОнли , тада ће бити приказано само дугме ОК . Чак и ако сте пропустили овај аргумент, ово дугме се подразумевано користи.

    [ титле ] - овде можете да наведете наслов оквира за поруку.

    Пређимо са речи за вежбање и почетак отклањања грешака. Да бисте приказалипоруку, додајте следећи ред у код кориснички дефинисане функције ГетМакБетвеен пре оператора Цасе Елсе :

    МсгБок вМак,, "Цоунт -" &амп; и

    Ево шта ћемо добити у резултату:

    Функција ГетМакБетвеен(рнгЦеллс Ас Ранге, МинНум, МакНум) Дим НумРанге Ас Ранге Дим вМак Дим аррНумс() Дим и Ас Интегер РеДим аррНумс(рнгЦеллс.Цоунт) За сваки НумРанге у рнгЦеллс вМак = НумРанге Изаберите Цасе вМак Цасе МинНум + 0,01 до МакНум - 0,01 аррНумс(и) = вМак и = и + 1 МсгБок вМак,, "Цоунт -" &амп; и Цасе Елсе ГетМакБетвеен = 0 Енд Селецт Нект НумРанге ГетМакБетвеен = ВорксхеетФунцтион.Мак(аррНумс) Енд Фунцтион

    Употребом променљиве вМак у оквиру за дијалог, видећемо који бројеви испуњавају критеријуме за избор, тако да да можемо изабрати највеће од њих. Са изразом "Цоунт -" &амп; И у насловној траци означавамо колико бројева смо већ одабрали да бисмо одредили максималну вредност. Бројач ће се повећавати са сваком новом вредношћу.

    Када поставимо УДФ, примењујемо формулу испод на период:

    = GetMaxBetween (A1:A6,10,50)

    Након дугмета Ентер је притиснут, видећете поруку као на слици испод:

    Ово је први број у опсегу А1: А6 који испуњава критеријуме: већи од 10 али мањи од 50.

    Након што кликнете на ОК, појављује се друга порука са бројем 14. Остали бројеви се не подударају са изборомкритеријума. Према томе, функција излази и враћа највећу од две вредности, 17.

    Функција МсгБок може да се користи на најважнијим местима у вашој прилагођеној функцији да контролише како вредности појединачних варијабли мењају. Кутије за поруке могу бити веома корисне када имате велику функцију и много рачунања. У овом случају, биће вам лако да одредите у ком делу кода је дошло до грешке.

    Одредите тачке заустављања и извршите корак по корак

    Можете додати тачке прекида у код вашу функцију где ће се извршење кода зауставити. Дакле, можете пратити процес израчунавања корак по корак. На тај начин можете видети како се мењају вредности променљивих.

    Да бисте додали тачку прекида, поставите курсор на линију која садржи изјаву где желите да паузирате. Затим кликните десним тастером миша и изаберите Дебуг -&гт; Укључите тачку прекида или само притисните Ф9. Такође можете да кликнете на жељено место у вертикалној сивој области лево од кода функције.

    Појавиће се црвени круг, као што можете да видите на снимку екрана испод. Ред кода у коме ће се израчунавање зауставити је означено црвеном бојом.

    Сада ће се прозор ВБА едитора отворити када се функција покрене. Курсор ће бити позициониран на месту где сте стали.

    Ако задржите показивач миша преко било које од променљивих у коду функције, можете видети њихову тренутнувредност:

    Притисните Ф5 да бисте наставили рачунање.

    Напомена. Након тачке прекида, можете почети да пратите напредак прорачуна корак по корак. Ако притиснете дугме Ф8, извршиће се само један следећи ред ВБА кода. Жута линија са стрелицом ће се такође померити на позицију последњег извршеног кода.

    Пошто је извршење функције поново паузирано, можете да видите тренутне вредности свих променљивих функције помоћу курсора миша.

    Следећи притисак на Ф8 ће нас одвести корак напред . Дакле, можете притиснути Ф8 до краја израчунавања. Или притисните Ф5 да бисте наставили рачунање до следеће тачке прекида.

    Ако дође до грешке, курсор ће бити заустављен на месту у коду где је дошло до грешке. Такође ћете видети искачућу поруку о грешци. Ово олакшава утврђивање узрока проблема.

    Преломне тачке које наведете биће примењене док не затворите датотеку. Када га поново отворите, мораћете поново да их подесите. Није најприкладнији метод, зар не?

    Међутим, овај проблем се може решити. Уметните наредбу Стоп у код функције на потребним тачкама и можете зауставити извршавање програма на исти начин као када користите тачке прекида.

    Када ВБА наиђе на наредбу Стоп , зауставиће извршавање програма и чекати вашу акцију. Затим проверите вредности променљивихпритисните Ф5 да наставите.

    Или притисните Ф8 да испуните функцију корак по корак као што је горе описано.

    Изјава Стоп је део програма и стога је није обрисан, као што је случај са тачком прекида. Када завршите са отклањањем грешака, сами га уклоните. Или га претворите у коментар тако што ћете му претходити једним наводником (').

    Отклањање грешака помоћу оператора Дебуг.Принт

    Можете поставити Дебуг.Принт у код функције на правом месту. Ово је корисно за проверу вредности променљивих које се циклично мењају.

    Можете видети пример перформанси Дебуг.Принт на слици испод.

    Изјава Дебуг.Принт и, вМак исписује вредности и њихове редне бројеве.

    У прозору Иммедиате видите два броја (17 и 14) из изабраног опсега, који одговарају поставити границе и међу којима ће бити изабран максимум. Цифре 1 и 2 значе да је функција завршила 2 циклуса у којима су бирани бројеви. Видимо вредности најважнијих променљивих, као што смо раније урадили са МсгБок . Али ово није зауставило функцију.

    Позовите функцију из процедуре

    Можете позвати кориснички дефинисану функцију не из ћелије на радном листу, већ из процедуре. У овом случају, све грешке ће бити приказане у прозору Висуал Басиц Едитор-а.

    Ево како можете позвати кориснички дефинисану функцију ГетМакБервеен изпроцедура:

    Суб Тест() Дим к к = ГетМакБетвеен(Ранге ("А1:А6"), 10, 50) МсгБок(к) Енд Суб

    Поставите курсор било где у коду и притисните Ф5. Ако нема грешке у функцији, видећете искачући прозор са резултатом прорачуна.

    У случају грешке, видећете одговарајућу поруку у ВБА едитору. Обрачун ће бити заустављен, а линија кода у којој је дошло до грешке биће означена жутом бојом. Можете лако да идентификујете где и зашто је дошло до грешке.

    То је све. Сада сте креирали сопствени додатак, додали га у Екцел и можете користити УДФ у њему. Ако желите да користите више УДФ-ова, само напишите код у модулу додатака у ВБА едитору и сачувајте га.

    То је то за данас. Покрили смо различите начине за отклањање грешака у прилагођеним функцијама и научили како да их користите у радној свесци. Заиста се надамо да ће вам ове смернице бити од помоћи. Ако имате питања, пишите у коментарима на овај чланак.

    Мајкл Браун је посвећен технолошки ентузијаста са страшћу за поједностављење сложених процеса помоћу софтверских алата. Са више од деценије искуства у технолошкој индустрији, усавршио је своје вештине у Мицрософт Екцел-у и Оутлоок-у, као и у Гоогле табеле и документима. Мајклов блог посвећен је дељењу свог знања и стручности са другима, пружајући једноставне савете и упутства за побољшање продуктивности и ефикасности. Без обзира да ли сте искусан професионалац или почетник, Мајклов блог нуди вредне увиде и практичне савете како да на најбољи начин искористите ове основне софтверске алате.