Када треба да се позабавите грешкама у Екцел ВБА, можете користити наредбу ОнЕррор. Међутим, прво морате знати неколико ствари. Изјаву Он Еррор можете користити на три начина.
Синтакса |
Шта ради |
Он Еррор ГоТо лабел |
Након извршења ове наредбе, ВБА наставља са извршавањем
наредбе која следи наведену ознаку. Морате укључити двотачку
након ознаке како би је ВБА препознао као ознаку. |
У случају грешке ГоТо 0 |
Након извршења ове изјаве, ВБА наставља са својим нормалним
понашањем провере грешака. Користите ову наредбу након употребе неке од
других изјава Он Еррор или када желите да уклоните руковање грешкама
у својој процедури. |
У случају грешке Настави даље |
Након извршења ове наредбе, ВБА једноставно игнорише све грешке
и наставља извршење са следећом наредбом. |
Наставак након грешке
У неким случајевима једноставно желите да се рутина заврши елегантно када дође до грешке. На пример, можете приказати поруку која описује грешку, а затим изаћи из процедуре. (Пример ЕнтерСкуареРоот5 приказан раније користи ову технику.) У другим случајевима, желите да се опоравите од грешке, ако је могуће.
Да бисте се опоравили од грешке, морате користити наредбу Ресуме. Ово брише услов грешке и омогућава вам да наставите са извршавањем на некој локацији. Изјаву Ресуме можете користити на три начина.
Синтакса |
Шта ради |
Резиме |
Извршење се наставља са наредбом која је изазвала грешку. Користите
ово ако ваш код за руковање грешкама исправи проблем и
у реду је да наставите. |
Настави Следећи |
Извршење се наставља са наредбом одмах након
наредбе која је изазвала грешку. Ово у суштини игнорише
грешку. |
Настави ознака |
Извршење се наставља на ознаци коју наведете. |
Следећи пример користи наредбу Ресуме након што дође до грешке:
Суб ЕнтерСкуареРоот6()
Дим Нум као варијанта
Пригуши поруку као стринг
Дим Анс Ас Интегер
Покушајте поново:
' Подесите руковање грешкама
У случају грешке ГоТо БадЕнтри
' Затражите вредност
Нум = ИнпутБок („Унесите вредност“)
Ако је Нум = „“ Затим изађите из под
' Уметните квадратни корен
АцтивеЦелл.Валуе = Скр(Бр)
Екит Суб
БадЕнтри:
Порука = Број грешке & “: “ & Грешка (Број грешке)
Порука = Порука & вбНевЛине & вбНевЛине
Порука = Порука & „Уверите се да је опсег изабран,“
Порука = Порука & „лист није заштићен“,
Порука = Порука & „и унесете ненегативну вредност.“
Порука = Мсг & вбНевЛине & вбНевЛине & „Покушати поново?“
Анс = МсгБок(Мсг, вбИесНо + вбЦритицал)
Ако је Анс = вбИес, онда настави покушај поново
Енд Суб
Ова процедура има другу ознаку: ТриАгаин. Ако дође до грешке, извршавање се наставља на ознаци БадЕнтри, а код приказује поруку испод. Ако корисник одговори кликом на Да, покреће се изјава Ресуме, а извршење се враћа на ознаку ТриАгаин. Ако корисник кликне на Не, поступак се завршава.
Ако дође до грешке, корисник може одлучити да ли ће покушати поново.
Имајте на уму да порука о грешци такође укључује број грешке, заједно са „званичним“ описом грешке.
Наредба Ресуме брише услов грешке пре него што наставите. Да бисте то видели, покушајте да замените следећу изјаву за претпоследњу изјаву у претходном примеру:
Ако је Анс = вбИес Онда идите на ТриАгаин
Код не ради исправно ако користите ГоТо уместо Ресуме. Да бисте демонстрирали, унесите негативан број. Добићете обавештење о грешци. Кликните на Да да бисте покушали поново, а затим унесите други негативан број. Ова друга грешка није заробљена јер првобитни услов грешке није обрисан.
Укратко, руковање грешком
Да бисмо вам помогли да све ово решавање грешака буде у реду, ево кратког и прљавог резимеа. Блок кода за руковање грешкама има следеће карактеристике:
-
Почиње одмах након ознаке наведене у изјави о грешци.
-
Ваш макро би требало да га досегне само ако дође до грешке. То значи да морате користити израз као што је Екит Суб или Екит Фунцтион непосредно пре ознаке.
-
Можда ће бити потребна изјава о животопису. Ако одлучите да не прекинете процедуру када дође до грешке, морате извршити наредбу Ресуме пре него што се вратите на главни код.
Знати када треба игнорисати грешке
У неким случајевима, сасвим је у реду игнорисати грешке. Тада долази у обзир изјава Он Еррор Ресуме Нект.
Следећи пример пролази кроз сваку ћелију у изабраном опсегу и конвертује вредност у њен квадратни корен. Ова процедура генерише поруку о грешци ако било која ћелија у избору садржи негативан број или текст:
Суб СелецтионСкрт()
Дим целл Ас Ранге
Ако ТипеНаме(Избор) <> “Ранге” онда изађите из Суб
За сваку ћелију у избору
целл.Валуе = Скр(целл.Валуе)
Следећа ћелија
Енд Суб
У овом случају, можда ћете желети да једноставно прескочите било коју ћелију која садржи вредност коју не можете да конвертујете у квадратни корен. Можете креирати све врсте могућности за проверу грешака користећи Иф-Тхен структуре, али можете осмислити боље (и једноставније) решење једноставним игнорисањем грешака које се јављају.
Следећа рутина то постиже коришћењем наредбе Он Еррор Ресуме Нект:
Суб СелецтионСкрт()
Дим целл Ас Ранге
Ако ТипеНаме(Избор) <> “Ранге” онда изађите из Суб
У случају грешке Настави даље
За сваку ћелију у избору
целл.Валуе = Скр(целл.Валуе)
Следећа ћелија
Енд Суб
Уопштено говорећи, можете користити наредбу о грешци Настави следеће ако сматрате да су грешке безопасне или безначајне за ваш задатак.