Содржина
Како што веќе знаете како да креирате UDF (и, се надевам, сте се обиделе да ги примените и во вашиот Excel), ајде да копаме малку подлабоко и да видиме што може да се направи во случај функцијата дефинирана од корисникот да не работи.
За да решите некои проблеми при креирање приспособена функција, најверојатно ќе треба да извршите дебагирање. Потоа можете да бидете сигурни дека функцијата работи правилно.
Ќе ги истражиме следните техники за отстранување грешки:
Кога креирате приспособена функција, секогаш постои можност дека ќе згрешиш. Прилагодените функции обично се доста сложени. И тие не секогаш почнуваат да работат правилно веднаш. Формулата може да врати неточен резултат или #VALUE! грешка. За разлика од стандардните функции на Excel, нема да видите други пораки.
Дали постои начин да се помине низ приспособена функција чекор по чекор за да се провери како функционира секоја нејзина изјава? Секако! Отстранувањето грешки се користи за ова.
Ќе ви понудам неколку начини за отстранување грешки на вашата приспособена функција за да можете да ја изберете онаа што работи за вас.
Како пример, ја користиме приспособената функција GetMaxBetween од една од нашите претходни написи која го пресметува максималниот број во наведениот опсег на вредности:
Функција GetMaxBetween(rngCells as Range, MinNum, MaxNum) Dim NumRange as Range Dim vMax Dim arrNums() Dim i Како целоброен ReDim arrNums(rngCells.Count) за секој NumRange во rngCells vMax =NumRange Изберете случај vMax Случај MinNum + 0,01 до MaxNum - 0,01 arrNums(i) = vMax i = i + 1 случај Друго GetMaxBetween = 0 Крај Изберете следно NumRange GetMaxBetween = Работен листФункција.Max(arrnctions Функцијата Крај се аргументите) опсег на ќелии каде се напишани броевите, како и горната и долната граница на вредности.
Поставете ја функцијата MsgBox на важни места
За да го следите извршувањето на пресметките, можете да прикажете вредностите на најважните променливи на екранот на вистинските места. Ова може да се направи со помош на скокачки полиња за дијалог.
MsgBox е дијалог прозорец што можете да го користите за да покажете некаква порака на корисникот.
Синтаксата на MsgBox е слична на другите функции на VBA:
MsgBox(промпт [, копчиња] [, наслов] [, датотека за помош, контекст])промпт е задолжителен аргумент. Ја содржи пораката што ја гледате во полето за дијалог. Може да се користи и за прикажување на вредностите на поединечни променливи.
Сите други аргументи се опционални.
[ копчиња ] - одредува кои копчиња и икони се прикажано во MsgBox . На пример, ако ја користиме опцијата vbOkOnly , тогаш ќе се прикаже само копчето OK . Дури и ако сте го пропуштиле овој аргумент, ова копче се користи стандардно.
[ наслов ] - овде можете да го наведете насловот на полето за пораки.
Ајде да се префрлиме од зборови за вежбање и започнете со дебагирање. За прикажување напорака, додадете ја следнава линија во кодот на функцијата GetMaxBetween дефинирана од корисникот пред операторот Case Else :
MsgBox vMax,, "Count -" & iЕве што ќе добиеме во резултатот:
Функција GetMaxBetween(rngCells како опсег, MinNum, MaxNum) Dim NumRange како опсег Dim vMax Dim arrNums() Dim i како цел број ReDim arrNums(rngCells.Count) За секој NumRange Во rngCells vMax = NumRange Изберете случај vMax Случај MinNum + 0,01 до MaxNum - 0,01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Случај Друго GetMaxBetween = 0 Крај Изберете Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End FunctionКористејќи ја променливата vMax во дијалог прозорецот, ќе видиме кои броеви ги исполнуваат критериумите за избор, така што дека можеме да го избереме најголемиот од нив. Со изразот "Брои -" & засилувач; Јас во насловната лента, покажуваме колку броеви веќе сме избрале за да ја одредиме максималната вредност. Бројачот ќе се зголемува со секоја нова вредност.
Откако ќе го поставиме UDF, ја применуваме формулата подолу во опсегот на датуми:
= GetMaxBetween (A1:A6,10,50)
По копчето Enter е притиснато, ќе видите порака како на скриншот подолу:
Ова е првиот број во опсегот A1: A6 што ги исполнува критериумите: поголем од 10, но помал од 50.
Откако ќе кликнете OK, се појавува втора порака со бројот 14. Останатите броеви не се совпаѓаат со избороткритериуми. Затоа, функцијата излегува и ја враќа најголемата од двете вредности, 17.
Функцијата MsgBox може да се користи на најважните места во вашата приспособена функција за да контролирате како вредностите на поединечни променливи се менуваат. Кутијата за пораки може да бидат многу корисни кога имате голема функција и многу пресметки. Во овој случај, ќе ви биде лесно да одредите во кој дел од кодот се појавува грешката.
Определете точки на запирање и изведувајте чекор по чекор
Можете да додадете точки на прекин на кодот на вашата функција каде што ќе престане извршувањето на кодот. Така, можете да го следите процесот на пресметување чекор по чекор. Притоа, можете да видите како се менуваат вредностите на променливите.
За да додадете точка на прекин, поставете го курсорот на линијата што ја содржи изјавата каде што избирате да паузирате. Потоа кликнете со десното копче и изберете Debug -> Вклучете ја точката на прекин или само притиснете F9 . Можете исто така да кликнете на саканото место на вертикалната сива област лево од кодот на функцијата.
Ќе се појави црвен круг, како што можете да видите на сликата од екранот подолу. Линијата на код каде што ќе се запре пресметката е означена со црвено.
Сега, прозорецот на уредувачот VBA ќе се отвори кога функцијата работи. Покажувачот ќе биде позициониран на местото каде што сте застанале.
Ако го ставите курсорот на глувчето над која било од променливите во кодот на функцијата, можете да ја видите нивната тековнавредност:
Притиснете F5 за да продолжите со пресметката.
Забелешка. По точката на прекин, можете да започнете да го следите напредокот на пресметките чекор по чекор. Ако го притиснете копчето F8, ќе се изврши само една следна линија од кодот VBA. Жолтата линија со стрелка исто така ќе се премести на последната извршена позиција на код.
Бидејќи извршувањето на функцијата е повторно паузирано, можете да ги видите тековните вредности на сите променливи на функцијата со помош на курсорот на глувчето.
Следното притискање на F8 ќе не одведе еден чекор напред . Така, можете да притиснете F8 до крајот на пресметката. Или притиснете F5 за да продолжите со пресметката до следната точка на прекин.
Ако се појави грешка, курсорот ќе биде запрен во точката во кодот каде што се појавила грешката. И, исто така, ќе видите порака за грешка што се појавува. Ова го олеснува утврдувањето на причината за проблемот.
Точките на прекин што ќе ги наведете ќе се применуваат додека не ја затворите датотеката. Кога повторно ќе го отворите, ќе треба повторно да ги поставите. Не мислите дека е најзгодниот метод?
Сепак, овој проблем може да се реши. Вметнете изјава Стоп во кодот на функцијата во потребните точки и можете да го запрете извршувањето на програмата на ист начин како кога користите точки на прекин.
Кога VBA ќе наиде на изјава Стоп , таа ќе го запре извршувањето на програмата и ќе ја чека вашата акција. Потоа проверете ги вредностите на променливитепритиснете F5 за да продолжите.
Или притиснете F8 за да ја исполните функцијата чекор по чекор како што е опишано погоре.
Изјавата Стоп е дел од програмата и затоа е не се брише, како што е случајот со точката на прекин. Кога ќе завршите со дебагирање, отстранете го сами. Или претворете го во коментар така што ќе му претходите еден цитат (').
Отстранување грешки со помош на операторот Debug.Print
Можете да го поставите Debug.Print во функционалниот код на вистинското место. Ова е корисно за проверка на вредностите на променливите кои циклично се менуваат.
Можете да видите пример за перформансите на Debug.Print на сликата од екранот подолу.
Изјава Debug.Print i, vMax ги печати вредностите и нивните редни броеви.
Во прозорецот Непосредно гледате два броја (17 и 14) од избраниот опсег, што одговара на поставете лимити и меѓу кои ќе се избере максимумот. Цифрите 1 и 2 значат дека функцијата завршила 2 циклуси во кои биле избрани броевите. Ги гледаме вредностите на најважните променливи, како што направивме порано со MsgBox . Но, ова не ја запре функцијата.
Повикување функција од процедура
Можете да повикате функција дефинирана од корисникот не од ќелија во работниот лист, туку од процедура. Во овој случај, сите грешки ќе бидат прикажани во прозорецот на Visual Basic Editor.
Еве како можете да ја повикате функцијата дефинирана од корисникот GetMaxBerween одпроцедура:
Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End SubПоставете го курсорот каде било во кодот и притиснете F5 . Ако нема грешка во функцијата, ќе видите скокачки прозорец со резултат од пресметката.
Во случај на грешка, ќе видите соодветна порака во уредникот VBA. Пресметката ќе се прекине и линијата на код во која настанала грешката ќе биде означена со жолто. Можете лесно да идентификувате каде и зошто настанала грешката.
Тоа е сè. Сега креиравте сопствен додаток, го додадовте во Excel и можете да го користите UDF во него. Ако сакате да користите повеќе UDF, само напишете го кодот во модулот за додатоци во уредникот VBA и зачувајте го.
Тоа е тоа за денес. Опфативме различни начини за отстранување грешки приспособени функции и научивме како да ги користите во вашата работна книга. Навистина се надеваме дека овие упатства ќе ви бидат корисни. Ако имате какви било прашања, напишете ги во коментарите на оваа статија.