ВБА Он Еррор Настави даље или иди на 0

Овај водич ће објаснити ВБА Он Еррор Ресуме Нект и Гото Статемент.

Чак и када је ваш код савршено изграђен, корисник можда неће учинити како бисте очекивали. Из тог разлога морате да уметнете руковаоце грешкама у свој код кад год постоји разлог да дође до грешке.

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

Наредба Он Еррор Ресуме Нект наредби говори ВБА -у да прескочи све редове кода који садрже грешке и пређе на следећи ред. ВБА ће игнорисати ред или редове са грешком и прећи на следећи ред кода.

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

На пример, у следећој процедури:

123456 Суб ХидеАллСхеетс ()Дим вс Ас ВорксхеетЗа сваки вс у АцтивеВоркбоок.Схеетсвс.Висибле = ФалсеНект всЕнд Суб

Ако покренемо овај код, добићемо грешку јер не можемо сакрити све радне листове у радну свеску - бар једна радна свеска мора остати видљива.

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

1234567 Суб ХидеАллСхеетс ()На Грешка Настави даљеДим вс Ас ВорксхеетЗа сваки вс у АцтивеВоркбоок.Схеетсвс.Висибле = ФалсеНект всЕнд Суб

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

Ако у коду немамо руковаоца грешкама, Грешка при укључивању Иди на 0 је подразумевано подешавање програма Екцел. То у основи значи да када дође до грешке са Он Еррор ГоТо 0, ВБА ће зауставити извршавање кода и приказати стандардно поље за поруку о грешци, на пример:

Ако смо ставили грешку као На Грешка Настави даље у нашем коду, али онда желимо да грешку вратимо на подразумевану вредност, можемо да уметнемо Грешка при укључивању Иди на 0 ред у наш код.

12345678910 Суб ЕррорГоТо0 ()На Грешка Настави даљеДим вс Ас ВорксхеетЗа сваки вс у АцтивеВоркбоок.Схеетсвс.Висибле = ФалсеНект всОн Еррор ГоТо 0'Покрени више кода овде, на пример:АцтивеСхеет.Наме = "Лист 1"Енд Суб

Сада, ако је дошло до грешке у нашем коду након Грешка при укључивању Иди на 0 линија, појавила би се подразумевана порука о грешци за Екцел. У овом примеру већ имамо лист под називом Схеет1 у АцтивеВоркбоок -у као код изнад Грешка при укључивању Иди на 0 скрива лист, али га не брише. Тада ће се приказати подразумевана порука о грешци програма Екцел која означава да је назив листа већ заузет.

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

Такође можемо присилити наш код да се пресели у другу линију кода помоћу На Грешка Иди на Лине који говори ВБА да оде до одређене линије кода ако дође до грешке.

123456789101112 Под ЕррорГоТоЛине ()На Грешка Настави даљеДим вс Ас ВорксхеетЗа сваки вс у АцтивеВоркбоок.Схеетсвс.Висибле = ФалсеНект всОн Еррор ГоТо еррхандлерАцтивеСхеет.Наме = "Лист 1"Екит Суберрхандлер:МсгБок ("Већ постоји лист под називом схеет1!", ВбЦритицал)Енд Суб

У горњем примеру, када код пронађе лист „Схеет1“, прелази у ред кода испод ознаке обрађивача грешака - у овом случају позива прилагођено поље за поруку обавештавајући кориснике да лист већ излази. Ознака руковаоца грешком мора да има двотачку иза себе да би ВБА показала да је то ознака.

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

Код ће тада скочити надоле на ред испод ознаке и вратити прилагођено поље за поруку.

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

Такође нам треба Екит Суб у поступку. Ако постоји НЕ лист под називом Схеет1, тада би се тај ред кода покренуо и преименовао активни лист у Схеет1. Затим желимо да се код заврши - не желимо да се пренесе у руковалац грешака и прикаже оквир за поруку. Линија Екит Суб тада излази из процедуре и зауставља код.

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

wave wave wave wave wave