Excel VBA Работа с грешки

Обработката на грешки е много полезен и важен механизъм за програмиране на езици като VBA. Контролът или предотвратяването на грешки е аспект на обработката на грешки, което означава предприемане на ефективни и значителни мерки вътре в VBA скрипт, за да се избегне появата на изскачащо съобщение за грешка

Различни видове грешки в VBA

  1. Синтаксична грешка или грешка при разбор
  2. Компилация или грешка при компилация
  3. Грешка по време на изпълнение
  4. Логическа грешка

Горните грешки могат да бъдат отстранени с помощта на споменатите по-долу грешки и различни „On Error“ изявления, вмъкнати между код.

При грешка Възобновете Напред

При грешка Goto 0

При грешка Goto

При грешка Goto -1

VBA Работа с грешки с помощта на различни изявления за „грешка“

Можете да изтеглите този шаблон на VBA за обработка на грешки в Excel - VBA Обработка на грешки в Excel шаблон

Пример №1 - Грешки при компилиране на VBA

Когато има грешка в изявление или синтаксис на VBA код, когато погрешно въведете код, той ще бъде подчертан в червен цвят в зависимост от опциите за настройка в инструментите (Ако сте избрали Автоматичен синтаксис проверка).

Появява се изскачащо поле за съобщение за грешка при компилиране, когато стартирате кода с неправилен синтаксис.

Код:

 Sub SYNTAX_ERROR () MsgBox Това е първата ми програма End Sub 

„КОМПЛЕКТНА ГРЕШКА: ПРОМЯНА НЕ ОПРЕДЕЛЕНА“ е най-честата грешка, която се появява като изскачащо съобщение. когато референтната променлива не е дефинирана, възниква тази грешка.

Код:

 Под VBA_FORMAT1 () A = 19049.83 A = Формат (A, "STANDARD") MsgBox A End Sub 

В горния пример не съм декларирал типа променлива като String, следователно възниква тази грешка. Така че, трябва да декларирам променлива като Dim A As String.

Код:

 Под VBA_FORMAT1 () Dim A като низ A = 19049.83 A = Формат (A, "STANDARD") MsgBox A End Sub 

Пример №2 - Грешка по време на изпълнение на VBA

Когато невъзможни математически изявления или термини присъстват в изявление, тогава възниква тази грешка по време на изпълнение.

Код:

 Sub RUNTIME_1 () MsgBox 6/0 Край Sub 

Пример №3 - VBA Логически грешки или бъгове

Тези грешки са много трудни за проследяване, нито ще бъдат подчертани, нито се появява изскачащо съобщение за грешка. това ще доведе до неочаквани действия и неправилни резултати.

Пример: Когато в променливата присъстват две променливи, тя може да съдържа неправилна. В този случай възниква логическа грешка.

Как да предотвратите грешки в VBA?

Нека да проверим как да предотвратим горепосочените различни видове грешки във VBA Excel.

Стъпка 1: За да отворите прозорец за редактор на VB Изберете или щракнете върху Visual Basic в групата Code в раздела Developer или можете директно да щракнете върху клавиша за бърз достъп Alt + F11 .

Стъпка 2: За да създадете празен модул, под обектите на Microsoft excel, щракнете с десния бутон върху лист 1 (VB_ERROR HANDLING) и вмъкнете модул, така че да се създаде нов празен модул.

VBA Грешка при работа с опция за отстраняване на грешки

По-добре е да компилирате код, преди да го стартираме. За да последвате компилация, трябва да се следват следните стъпки. В лентата с инструменти на VB менюто, под опцията Debug, трябва да изберем компилиран VBA проект. Когато щракнете върху него, той проверява кода стъпка по стъпка, след като открие грешката, тя ще я подчертае и се появява изскачащо съобщение, като по този начин трябва да я коригирате. след като бъде коригирана, трябва да компилирате, за да намерите следващата грешка в кода.

Забележка: С помощта на опцията за компилиране можем да поправим грешката компилация и синтаксис.

VBA Работа с грешки с помощта на различни изявления за „грешка“

1. On Error Resume Next

Тук грешката ще бъде игнорирана и кодът ще продължи.

В по-долу споменатия пример 6 не може да бъде разделен на нула, ако го стартирате без да въведете оператора On Error Resume Next, тогава се появява под споменатата грешка по време на изпълнение.

Код:

 Sub RUNTIME_1 () MsgBox 6/0 Край Sub 

Ако On Error Resume Next е въведен в горната част на кода след Sub изявление, той игнорира грешка по време на изпълнение и преминава към следващото изречение, което води до изход 6/2, т.е. 3 (Поле за съобщение с резултат от него).

Код:

 Sub RUNTIME_2 () On Error Resume Next MsgBox 6/0 MsgBox 6/2 End Sub 

2. On Error GoTo 0 и Error GoTo -1

'On Error GoTo 0' ще спре кода на конкретния ред, който причинява грешката и показва поле за съобщение, което описва или показва грешката.

Код:

 Sub onError_Go_to_0 () При грешка GoTo 0 Убийте диапазона „C: TempFile.exe“ („A1“). Стойност = 100 / „PETER“ Край Sub 

Обикновено показва поведение по проверка на грешки по подразбиране, важно е, когато се използва заедно с „On Error Resume Next“.

Обикновено можете да наблюдавате полето за съобщение за грешка по време на изпълнение, съдържа опции „Продължи“, „Край“, „Отстраняване на грешки“ и „Помощ“ . нека да проверим употребите на всеки от тях.

  • Опцията Продължи ще игнорира изключението и ще продължи кода, ако е възможно.
  • Опцията за край прекратява програмата.
  • Опцията за отстраняване на грешки ще подчертае оператора, където е възникнала грешката. което ви помага да отстранявате грешки или коригирате кода.
  • Опцията за помощ ще ви отведе да отворите страницата за помощ на Microsoft MSDN.

On Error GoTo 0 с On Error Resume Next

Код:

 Sub onError_Go_to_0_with_Resume_next () При грешка Възобновете Next Kill "C: TempFile.exe" При грешка GoTo 0 Обхват ("A1") Стойност = 100 / "PETER" End Sub 

В горния код той ще пренебрегва грешките, докато не достигне оператора On Error GoTo 0. След отказът за грешка GoTo 0, кодът се връща назад или преминава към нормална проверка на грешки и задейства очакваната грешка напред. когато пусна горния код, той ще покаже грешка при разделянето, т.е. несъответствие на типа (числовата стойност не може да бъде разделена на текст).

On Error GoTo 0 деактивира всяко блокиране на грешки, присъстващо понастоящем във VBA кода, т.е. изключва обработката на грешки в основния код, докато On Error GoTo -1 изчиства обработката на грешки и я настройва на нищо, което ви помага или ви позволява да създадете друг капан за грешка.

3. При грешка GoTo <LABEL

VBA за прехвърляне на програмния контрол на линията, последвана от етикета, ако се срещат грешки по време на изпълнение, т.е. код прескача към посочения етикет. Тук кодовите операции между реда за изключение и етикета няма да се изпълняват.

Този метод е по-подходящ и значителен за грациозно излизане от програмата, ако по време на изпълнението възникне някаква голяма фатална грешка.

В споменатия по-долу код на VBA, веднага щом грешката се появи на ред 3, програмата прехвърля контрола на ред 6, т.е. етикет (Popup съобщението се появява като „Манипулатор на изключения“ ).

Код:

 Sub OnError_Go_to_Label () При грешка GoTo Error_handler: MsgBox 9/0 MsgBox "Този ред няма да бъде изпълнен" Излезте от Sub Error_handler: MsgBox ", обработвател на изключения" End Sub 

Тук можете да забележите, че „Exit Sub“ трябва да се използва точно преди етикета „Error_handler:“, това се прави, за да се гарантира, че блокът на кода за обработка на грешки трябва да спре или да не се изпълни, ако няма грешка. Сега можете да запазите работната си книга като „Работна книга с възможност за макрос на Excel“. Като кликнете върху запазване като в левия ъгъл на работния лист.

Ако отворите файл отново, можете да щракнете върху клавиша за бърз достъп, т.е. Fn + Alt + f8, появи се диалогов прозорец „Макрос“, където можете да стартирате запазен макро код по ваш избор или можете да щракнете върху Fn + Alt + F11 за пълен прозорец на макрос

Неща, които трябва да запомните

  • Преди да напишете код, трябва да сте сигурни, че прекъсването на необработените грешки е проверено или избрано грешно. опция за улавяне под общо в опциите на инструмента на лентата с инструменти на VBA.
  • Това е настройка по подразбиране, която помага да спрете кода си за грешки, които не се обработват.
  • Прекъсване на всички грешки: Ще спре кода ви на всички видове грешки.
  • Модул за разбиване на класове: В случай, че в кода се използва обект като потребителска форма, той ще подчертае, че точната линия, причиняваща грешката.

Препоръчителни статии

Това е ръководство за работа с грешки в VBA. Тук обсъждаме как да използвате VBA обработка на грешки в Excel, заедно с някои практически примери и изтеглящ се шаблон на excel. Можете да разгледате и другите ни предложени статии -

  1. VBA деклариране на масив (примери)
  2. VBA при грешка
  3. VBA Unprotect Sheet
  4. Графи VBA | Шаблони на Excel
  5. VBA Environment

Категория: