Обрађивачи грешака вам омогућавају да наведете шта се дешава када се наиђе на грешку док се ваш Екцел макро код покреће. Обрађивачи грешака су линије сличне следећим:
У случају грешке ГоТо МиЕррор
Без руковаоца грешкама, свака грешка која се појави у вашем коду ће подстаћи Екцел да активира поруку о грешци која није од помоћи која обично неће јасно пренети шта се догодило. Међутим, уз помоћ руковалаца грешкама, можете изабрати да игноришете грешку или да елегантно изађете из кода са сопственом поруком кориснику.
Постоје три типа изјава о грешци:
-
У случају грешке ГоТо СомеЛабел: код скаче на наведену ознаку.
-
Приликом грешке наставља се следеће: грешка се игнорише и код се наставља.
-
У случају грешке ГоТо 0: ВБА се враћа на нормално понашање провере грешака.
У случају грешке ГоТо СомеЛабел
Понекад грешка у вашем коду значи да морате елегантно напустити процедуру и дати својим корисницима јасну поруку. У овим ситуацијама, можете користити наредбу Он Еррор ГоТо да бисте рекли Екцел-у да пређе на одређени ред кода.
На пример, у следећем малом делу кода кажете Екцел-у да подели вредност у ћелији А1 са вредношћу у ћелији А2, а затим поставите одговор у ћелију А3. Лако. Шта би могло поћи по злу?
Подмакро1()
Опсег("А3").Вредност = Опсег("А1").Вредност / Опсег("А2").Вредност
Енд Суб
Како се испоставило, две велике ствари могу поћи наопако. Ако ћелија А2 садржи 0, добијате грешку дељења са 0. Ако ћелија А2 садржи ненумеричку вредност, добићете грешку неподударања типа.
Да бисте избегли гадну поруку о грешци, можете рећи Екцел-у да у случају грешке желите да извршење кода пређе на ознаку под називом МиЕкит.
У следећем коду, иза ознаке МиЕкит следи порука кориснику која даје пријатељски савет уместо гадне поруке о грешци. Такође обратите пажњу на Екит Суб линију пре ознаке МиЕкит, која осигурава да ће код једноставно изаћи ако не дође до грешке:
Подмакро1()
У случају грешке ГоТо МиЕкит
Опсег("А3").Вредност = Опсег("А1").Вредност / Опсег("А2").Вредност
Екит Суб
МиЕкит:
МсгБок "Молимо користите важеће бројеве који нису нула"
Енд Суб
У случају грешке Настави даље
Понекад желите да Екцел игнорише грешку и једноставно настави са радом кода. У овим ситуацијама можете користити наредбу Он Еррор Ресуме Нект.
На пример, следећи део кода треба да избрише датотеку под називом ГхостФиле.еке из Ц:Темп директоријума. Након што се датотека обрише, леп оквир са поруком говори кориснику да је датотека нестала:
Подмакро1()
Убијте "Ц:ТемпГхостФиле.еке"
МсгБок "Датотека је избрисана."
Енд Суб
Код одлично функционише ако заиста постоји датотека за брисање. Али ако из неког разлога датотека под називом ГхостФиле.еке не постоји на Ц:Темп диску, појављује се грешка.
У овом случају, није вас брига ако датотека није тамо јер сте је ионако желели да избришете. Дакле, можете једноставно игнорисати грешку и наставити са кодом.
Коришћењем наредбе Он Еррор Ресуме Нект, код се креће својим током без обзира да ли циљна датотека постоји или не:
Подмакро1()
У случају грешке Настави даље
Убијте "Ц:ТемпГхостФиле.еке"
МсгБок "Датотека је избрисана."
Енд Суб
У случају грешке ГоТо 0
Када користите одређене изјаве о грешци, можда ће бити потребно ресетовати понашање ВБА провере грешака. Да бисте разумели шта ово значи, погледајте следећи пример.
Овде прво желите да избришете датотеку под називом ГхостФиле.еке из Ц:Темп директоријума. Да бисте избегли грешке које могу проистећи из чињенице да циљана датотека не постоји, користите наредбу Он Еррор Ресуме Нект. Након тога, покушавате да урадите сумњиву математику тако што ћете поделити 100/Мике:
Подмакро1()
У случају грешке Настави даље
Убијте "Ц:ТемпГхостФиле.еке"
Опсег("А3").Вредност = 100 / "Мајк"
Енд Суб
Покретање овог дела кода требало би да генерише грешку због нејасне математике, али не. Зашто? Зато што је последња инструкција коју сте дали коду била Он Еррор Ресуме Нект. Свака грешка која се појави након те линије се ефективно игнорише.
Да бисте решили овај проблем, можете користити наредбу Он Еррор ГоТо 0 да бисте наставили нормално понашање провере грешака:
Подмакро1()
У случају грешке Настави даље
Убијте "Ц:ТемпГхостФиле.еке"
У случају грешке ГоТо 0
Опсег("А3").Вредност = 100 / "Мајк"
Енд Суб
Овај код ће игнорисати грешке све до изјаве Он Еррор ГоТо 0. Након те изјаве, код се враћа на нормалну проверу грешака и покреће очекивану грешку која потиче од нејасне математике.