ВБА Он Еррор - Грешке при руковању најбољим праксама

ВБА грешке Цхеат Схеет

Грешке

ОписВБА кодУкључена грешка - Заустављање кода и грешка на екрануГрешка при укључивању Иди на 0Грешка при укључивању - Прескочите грешку и наставите са радомНа Грешка Настави даљеГрешка при укључивању - Идите на ред кода [Лабел]Грешка при укључивању Иди на [ознака]Брише (ресетује) грешкуОн Еррор ГоТо -1Прикажи број грешкеМсгБок Ерр.НумберПрикажи опис грешкеМсгБок Ерр.ДесцриптионФункција генерисања сопствене грешкеЕрр.Раисе

Погледајте више ВБА „Цхеат Схеетс“ и бесплатно преузимање ПДФ -а

ВБА руковање грешкама

ВБА руковање грешкама односи се на процес предвиђања, откривања и решавања ВБА Рунтиме грешака. Процес руковања грешкама ВБА се јавља при писању кода, пре него што се грешке заиста догоде.

ВБА грешке у току извођења су грешке које се јављају током извршавања кода. Примери грешака у току извођења укључују:

  • Референцирање непостојеће радне свеске, радног листа или другог објекта
  • Неважећи подаци, нпр. упућивање на Екцел ћелију која садржи грешку
  • Покушај дељења са нулом

ВБА Изјава о грешци

Већина ВБА грешака се ради помоћу О Изјави о грешци. Наредба Он Еррор говори ВБА шта треба да уради ако наиђе на грешку. Постоје три О изјавама о грешкама:

  • Он Еррор ГоТо 0
  • На Грешка Настави даље
  • Укључено Грешка ГоТо Лине

Он Еррор ГоТо 0

Он Еррор ГоТо 0 је подразумевано подешавање ВБА. Ово подразумевано подешавање можете вратити додавањем следеће линије кода:

1 Он Еррор ГоТо 0

Када дође до грешке са Он Еррор ГоТо 0, ВБА ће зауставити извршавање кода и приказати стандардни оквир за поруку о грешци.

Често ћете додавати Он Еррор ГоТо 0 након додавања На Грешка Настави даље руковање грешкама (следећи одељак):

123456789 Суб ЕррорГоТо0 ()На Грешка Настави даљеАцтивеСхеет.Схапес ("Старт_Буттон"). ИзбришитеОн Еррор ГоТо 0„Покрени више кодаЕнд Суб

На Грешка Настави даље

На Грешка Настави даље говори ВБА да прескочи све редове кода који садрже грешке и пређе на следећи ред.

1 На Грешка Настави даље

Белешка: На Грешка Настави даље не исправља грешку или је на други начин решава. Једноставно каже ВБА да настави као да ред кода који садржи грешку не постоји. Неправилна употреба На Грешка Настави даље може довести до нежељених последица.

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

123 На Грешка Настави даљеАцтивеСхеет.Схапес ("Старт_Буттон"). ИзбришитеОн Еррор ГоТо 0

Обавештење које смо додали Он Еррор ГоТо 0 иза реда кода који садржи потенцијалну грешку. Ово поништава руковање грешкама.

У следећем одељку ћемо вам показати како да тестирате да ли је дошло до грешке при коришћењу Ерр.Нумбер, дајући вам напредније опције за руковање грешкама …

Ерр.Нумбер, Ерр.Цлеар и Цатцхинг Еррорс

Уместо да једноставно прескочимо ред који садржи грешку, грешку можемо ухватити помоћу На Грешка Настави даље и Ерр.Нумбер.

Ерр.Нумбер враћа број грешке који одговара врсти откривене грешке. Ако нема грешке, Ерр.Нумбер = 0.

На пример, ова процедура ће вратити „11“ јер је грешка која се догоди Грешка током извођења '11'.

1234567 Под ЕррорНумбер_ек ()На Грешка Настави даљеАцтивеЦелл.Валуе = 2 /0МсгБок Ерр.НумберЕнд Суб

Руковање грешкама са Ерр.Нумбер

Истинска моћ Ерр.Нумбер лежи у способности да открије да ли је дошло до грешке (Ерр.Нумбер 0). У доњем примеру, креирали смо функцију која ће тестирати да ли лист постоји помоћу Ерр.Нумбер.

12345678910111213141516171819 Суб ТестВС ()МсгБок ДоесВСЕкист ("тест")Енд СубФункција Да ли ВСЕкист (всНаме Ас Стринг) Као БоолеанДим вс Ас ВорксхеетНа Грешка Настави даљеСет вс = Табеле (всНаме)'Ако грешка ВС не постојиАко је Ерр.Број 0 ТадаДоесВСЕкист = ФалсеИначеДоесВСЕкист = ТачноКрај АкоОн Еррор ГоТо -1Завршна функција

Напомена: Додали смо а Он Еррор ГоТо -1 до краја који ресетује Ерр.Нумбер на 0 (погледајте два одељка надоле).

Витх На Грешка Настави даље и Ерр.Нумбер, можете копирати "Покушај да ухватиш" функционалност других програмских језика.

Укључено Грешка ГоТо Лине

Укључено Грешка ГоТо Лине говори ВБА -и да „оде до“ означене линије кода када дође до грешке. Изјаву Го То декларишете овако (где је еррХандлер ознака линије на коју треба ићи):

1 Укључено Грешка Иди на еррХандлер

и направите ознаку линије овако:

1 еррХандлер:

Напомена: Ово је иста ознака коју бисте користили са обичном ВБА ГоТо изјавом.

У наставку ћемо показати коришћење Укључено Грешка ГоТо Лине да изађете из процедуре.

Он Еррор Екит Суб

Можете да користите Он Еррор ГоТо Лине да изађете из подморнице када дође до грешке.

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

12345678 Суб ЕррГоТоЕнд ()Укључено Грешка Иди на ендПроц'Неки кодендПроц:Енд Суб

или помоћу наредбе Екит Суб:

123456789101112131415 Суб ЕррГоТоЕнд ()Укључено Грешка Иди на ендПроц'Неки кодИди на скипЕкитендПроц:Екит СубскипЕкит:„Још неки кодЕнд Суб

Ерр.Цлеар, Он Еррор ГоТо -1 и Ресеттинг Ерр.Нумбер

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

Након што дође до грешке, обоје Ерр.Цлеар и Он Еррор ГоТо -1 може се користити за ресетовање Ерр.Нумбер до 0. Али постоји једна веома важна разлика: Ерр.Цлеар не поништава саму стварну грешку, само ресетује Ерр.Нумбер.

Шта то значи? КористећиЕрр.Цлеар, нећете моћи да промените поставку руковања грешкама. Да бисте видели разлику, испробајте овај код и замените га Он Еррор ГоТо -1 са Ерр.Цлеар:

123456789101112131415161718192021 Суб ЕррЕкамплес ()О грешци ГоТо еррХандлер:Грешка „Апликација дефинисана“Грешка (13)Екит СуберрХандлер:'Цлеар ЕррорОн Еррор ГоТо -1Он Еррор ГоТо еррХандлер2:Грешка „Неусклађеност типа“Грешка (1034)Екит СуберрХандлер2:Дебуг.Принт Ерр.ДесцриптионЕнд Суб

Обично препоручујем да увек користите Он Еррор ГоТо -1, осим ако немате добар разлог за употребу Ерр.Цлеар уместо тога.

ВБА Он Еррор МсгБок

Можда бисте такође желели да прикажете оквир за поруку о грешци. Овај пример ће приказати различите оквире за поруке у зависности од тога где се грешка јавља:

12345678910111213141516171819202122232425262728 Суб ЕррорМессагеЕк ()Дим еррМсг Ас СтрингУкључено Грешка Иди на еррХандлер'Фаза 1еррМсг = "Дошло је до грешке у фази Цопи & Пасте."'Подигни грешку (11)'Фаза 2еррМсг = "Дошло је до грешке у фази валидације података."'Подигни грешку (11)'Фаза 3еррМсг = "Дошло је до грешке током фазе изградње П & Л и копирања."Подигни грешку (11)'Фаза 4еррМсг = "Дошло је до грешке при покушају пријављивања увоза на страници за подешавање."'Подигни грешку (11)ГоТо ендПроцеррХандлер:МсгБок еррМсгендПроц:Енд Суб

Овде бисте заменили Ерр.Раисе (11) вашим стварним кодом.

ВБА ИсЕррор

Други начин решавања грешака је да их тестирате помоћу ВБА ИсЕррор функције. Функција ИсЕррор тестира израз на грешке, враћа ТРУЕ или ФАЛСЕ ако дође до грешке.

123 Суб ИсЕррорЕк ()МсгБок ИсЕррор (Опсег ("а7"). Вредност)Енд Суб

Ако грешка ВБА

Такође можете да решите грешке у ВБА помоћу Екцел ИфЕррор функције. Функцији ИфЕррор мора се приступити помоћу Класа функције радног листа:

1234567 Суб ИфЕррорЕк ()Дим н Ас Лонгн = Функција радног листа.ИфЕррор (Опсег ("а10"). Вредност, 0)МсгБок нЕнд Суб

Ово ће приказати вредност опсега А10, ако је вредност грешка, уместо тога ће приказати 0.

ВБА типови грешака

Грешке у току извођења

Као што је већ речено:

ВБА грешке у току извршавања су грешке које се јављају током извршавања кода. Примери грешака у току извођења укључују:

  • Референцирање непостојеће радне свеске, радног листа или другог објекта
  • Неважећи подаци, нпр. упућивање на Екцел ћелију која садржи грешку
  • Покушај дељења са нулом

Грешке током извођења можете „обрадити грешком“ користећи горе описане методе.

Грешке у синтакси

Грешке у синтакси ВБА су грешке при писању кода. Примери синтаксичких грешака укључују:

  • Грешка у писању
  • Интерпункција недостаје или је погрешна

ВБА Едитор идентификује многе синтаксичке грешке са црвеним истицањем:

ВБА Едитор такође има опцију за „Аутоматску проверу синтаксе“:

Када је ово потврђено, ВБА Едитор ће генерисати оквир за поруку који вас упозорава на синтаксичке грешке након што унесете ред кода:

Лично сматрам да је ово изузетно досадно и онемогућавам функцију.

Грешке при компајлирању

Пре него што покуша да покрене процедуру, ВБА ће „компајлирати“ процедуру. Компилација претвара програм из изворног кода (који можете видети) у извршни облик (не видите).

Грешке при компајлирању ВБА су грешке које спречавају компајлирање кода.

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

Други примери укључују:

  • За без Следећи
  • Изаберите без Крај Изаберите
  • Ако без Крај Ако
  • Позивање а процедура то не постоји

Грешке у синтакси (претходни одељак) су подскуп грешака при компајлирању.

Дебуг> Цомпиле

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

То можете учинити тако што ћете унапред саставити пројекат. Да бисте то урадили, идите на Дебуг> Цомпиле ВБА Пројецт.

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

Можете рећи да су све грешке исправљене јер Саставите ВБА пројекат биће засивљено:

Грешка прекорачења

Тхе Грешка ВБА претицања се јавља када покушате да ставите вредност у променљиву која је превелика. На пример, Целобројне променљиве може да садржи само вредности између -32,768 до 32,768. Ако унесете већу вредност, добићете грешку преливања:

Уместо тога, требало би да користите Лонг Вариабле за складиштење већег броја.

Остали услови грешке ВБА

ВБА грешка хватања

За разлику од других програмских језика, у ВБА не постоји Изјава о улову. Међутим, изјаву о улову можете реплицирати помоћу На Грешка Настави даље и Ако је Ерр.Број 0 Тада. Ово је горе обрађено у Еррор Хандлинг витх Ерр.Нумбер.

ВБА грешка игнорисања

Да бисте игнорисали грешке у ВБА, једноставно користите На Грешка Настави даље изјава:

1 На Грешка Настави даље

Међутим, као што је горе поменуто, морате бити опрезни у коришћењу ове изјаве јер не исправља грешку, већ једноставно игнорише ред кода који садржи грешку.

ВБА Тхров Еррор / Ерр.Раисе

Да бисте погрешили у ВБА, користите Ерр.Раисе метода.

Ова линија кода ће повећати грешку при извођењу '13': Неусклађеност типа:

1 Подигни грешку (13)

Хватање грешака ВБА

Хватање грешака ВБА је само још један израз за ВБА руковање грешкама.

ВБА порука о грешци

А. ВБА порука о грешци изгледа овако:

Када кликнете на „Отклањање грешака“, видећете ред кода који приказује грешку:

Понављање ВБА грешака

Најбољи начин за руковање грешкама унутар петље је коришћење На Грешка Настави даље упоредо са Ерр.Нумбер да бисте открили да ли је дошло до грешке (Не заборавите да користите Ерр.Цлеар за брисање грешке након сваког појављивања).

Доњи пример ће поделити два броја (колона А са колоном Б) и исписати резултат у колону Ц. Ако дође до грешке, резултат ће бити 0.

12345678910111213141516 Под тест ()Дим целл Ас РангеНа Грешка Настави даљеЗа сваку ћелију у домету ("а1: а10")'Подесите вредност ћелијецелл.Оффсет (0, 2) .Валуе = целл.Валуе / целл.Оффсет (0, 1) .Валуе'Ако је Целл.Валуе грешка, тада поставите на 0Ако је Ерр.Број 0 Тадацелл.Оффсет (0, 2) .Вредност = 0Ерр.ЦлеарКрај АкоСледећиЕнд Суб

ВБА руковање грешкама у Аццессу

Сви горе наведени примери раде потпуно исто у Аццесс ВБА као и у Екцел ВБА.

123456789101112131415161718 Функција ДелРецорд (фрм као образац)'ова функција се користи за брисање записа у табели из обрасцаУкључено Грешка ГоТо се завршаваСа фрмАко .НевРецорд Тада.ОпозовиИзлазна функцијаКрај АкоЗавршитиВитх фрм.РецордсетЦлоне. Боокмарк = фрм.Ознака.Брисатифрм.РекуериЗавршитиИзлазна функцијазавршетак:КрајЗавршна функција

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave