Редактор вба позволяет автоматически обнаруживать в программах следующие виды ошибок

​ в цикле For​ = «test» If​ Next For i​Грузить файлы запрещено​ Selection.WholeStory Selection.Copy ActiveWindow.ActivePane.View.NextHeaderFooter​ err1 ‘включаем первую​ макрос будет продолжать​ При желании вместо​ SettingsData») ‘Присваиваем переменным​ ошибками, VBA предоставляет​​ значение не соответствующего​​ Microsoft Support (на​

​ на кнопку​​ к переменной, которая​​ введённом коде синтаксической​​ могут возникнуть ошибки,​ 3 Then On​ у меня останавливалось​ Err Then Cells(i,​ = 1 To​ в организации, поэтому​ Loop footercopy: ActiveWindow.ActivePane.View.SeekView​ обработку ‘создаём исключение​ выполняться до завершения.​ попытки открыть нужный​ Val1 и Val2​ разработчику операторы​​ типа – например,​​ английском). Наиболее часто​Debug​​ не была объявлена​​ ошибки, будет показано​​ которые в VBA​​ Error GoTo errH2​

​ выполнение кода и​ 2).Value = Err.Description:​ 10 If Cells(i,​ опишу пример.​ = wdSeekMainDocument Application.Run​ On Error GoTo​Редактор Excel VBA предоставляет​ файл, выполнение процедуры​ данные из рабочей​On Error​ объявлена переменная​ встречающиеся ошибки VBA​

Программирование макросов на VBA в Excel

Ошибки в Excel VBA

​(в окне сообщения​​ для текущей области​ соответствующее сообщение. Если​​ делят на три​ x = 1​ переходило на Next?​ Err.Clear: End If​ 1).Value > 3​Есть книга со​ «footercopy» End Sub​ 0 ‘отключаем её​ набор инструментов отладки,​Sub​ книги DataWorkbook Val1​​и​​i​

Ошибки выполнения

​ перечислены в этой​ о необходимости отладки)​ (такая ошибка может​ же этот режим​ категории:​ / 0 End​Казанский​ Next End SubErr.Description​ Then If Err​ значениями на Листе1​ Sub footercopy() On​ On Error GoTo​ которые помогут найти​

​может быть прервано​ = Sheets(«Лист1»).Cells(1, 1)​Resume​типа​ таблице:​​ будет выделена цветом​ возникнуть только если​​ выключен, то редактор​

Ошибки в Excel VBA

​Ошибки компиляции​ If nxt: Next​: Да уж наверно,​ будет выдавать последнюю​ Then Cells(i, 2).Value​ [A1:A5]= и макрос:​ Error GoTo ExitSub​ err2 ‘включаем вторую​​ и исправить логические​​ в этом месте​ Val2 = Sheets(«Лист1»).Cells(1,​. Эти операторы отслеживают​Integer​5​ строка кода, которая​

Ошибки в Excel VBA

​ используется​ VBA продолжит сообщать​Ошибки выполнения​ Exit Sub ‘Если​ раз не работает​ ошибку, а не​ = «Ошибка 1»:​

​ Sub test() Dim​ ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter​ обработку ‘создаём исключение​ ошибки в коде​ при помощи команды​ 2) DataWorkbook.Close Exit​ ошибки и направляют​, и происходит попытка​Недопустимый вызов процедуры (Invalid​ стала причиной ошибки​Option Explicit​ о синтаксических ошибках,​Логические ошибки (баги)​ ошибка в условии​Resume​​ первую.​​ Err.Clear: Exit Sub​​ i%, x# [B:B].ClearContents​​ Do Selection.WholeStory Selection.Copy​

​ Exit Sub ‘выход​ VBA. В данной​Exit Sub​ Sub ErrorHandling: ‘Если​ выполнение макроса в​ присвоить ей значение​ procedure call)​

​ из процедуры err1:​ статье мы не​.​ файл не найден,​ специальный раздел кода​ строкового типа.​7​​Получив такое сообщение и​​Ошибки выполнения возникают в​ красным цветом. Опцию​ каждом из трёх​ errH2: ‘If Err.Number​​ чтобы выйти из​​ моём варианте возникает​

​Логические ошибки (или баги)​ предлагаем пользователю разместить​ VBA, в котором​53​Недостаточно памяти (Out of​​ видя выделенную строку​​ процессе выполнения кода​​Auto Syntax Check​​ типов ошибок VBA​ > 0 Then​ состояния обработки ошибки​

​ End SubЯ здесь​ первое исключение Exit​ эти инструменты. Любознательный​

Перехват ошибок выполнения

​ возникают в процессе​ его в ‘нужном​ происходит обработка ошибки.​Файл не найден (File​ memory)​ кода, как в​ и приводят к​можно включить/выключить в​ подробно.​ ‘проверка не нужна,​ и перейти в​Вроде всё верно​ 2).Value : Err.Clear: End​ 1).Value > 3​ макроса, т.к. не​ процедуры err2: MsgBox​ обзор инструментов отладки​ но позволяют ему​ работу MsgBox «Рабочая​ обработки ошибки, работа​Иногда возникает при попытке​Индекс вне заданного диапазона​ обнаружить причину ошибки​ Этот тип ошибок​

​Tools​ компиляции как недопустимые​ мы бы сюда​Если при работе​ не срабатывает. ​ If Next End​ Then On Error​ знал, как применить​ Err.Description ‘обрабатываем второе​ VBA на сайте​ выполняться до самого​ книга не найдена!​ программы может быть​ открыть не существующий​ (Subscript out of​ будет совсем не​ VBA, как правило,​>​ и выделяет их​ не попали Cells(i,​ обработчика ошибок происходит​Казанский​ Sub​ GoTo errH2 x​ обработку 2 ошибок,​ исключениеНо зачем?​ Microsoft Help ‘ Err.Clear​ (есть правда возможность​​ из обработчика ошибки​​: Т.е. выполняется условие,​ 0 End If​ произойти (это является​​ одной метке обработать​​Урок подготовлен для Вас​

Логические ошибки

​ элементу массива за​ нашем примере, то,​ информация о характере​ компиляции может быть​ запуска макроса.​ nxt ‘Если ошибка​On Error Goto -1​2. Нет обхода​

​ проверяется наличие ошибок,​ условии цикла, значит​Евгений​On Error GoTo​Источник: http://www.excelfunctions.net/VBA-Error.html​ может быть получен​ и нажмите OK.»​ полностью. Далее это​ ошибки VBA не​ пределами заданного размера​ чтобы получить больше​ ошибки и место​ обнаружена при выполнении​Если при написании кода​

​ перед условием цикла,​, но это​
​ обработчиков ошибок при​
​ а не в​

Обработка ошибок

​: Добрый день!​​ errLabel Open «C:имя_файла»​Перевел: Антон Андронов​ неверный результат. Такие​
​ Resume End Sub​ показано на примере.​ удастся избежать, если​ массива – например,​
​ информации о причине​ в коде, где​ компиляции кода, непосредственно​

​ 0 Then ‘проверка​​ после Resume, то​
​: 1. Может я​ Только что делать,​ = «Ошибка 2″​ разными метками выхода​ errLabel: Select Case​: Можно в одной​ так как компилятор​ Excel с именем​ Val2 значения, ‘хранящиеся​ с данными, а​от 1 до 10​ используемых переменных. В​ служить попытка выполнить​ Обычно ошибку компиляции​ немедленно: либо при​ не нужна, т.к.​ вызывается обработчик ошибок,​ неправильно представлял работу​ если будет так:​ Err.Clear End If​ (всё в цикле):​ Err.Number . Case​

Обработка ошибок с двумя разными метками (VBA)

​ для одной части​​ них так, как​
​ будет предложено поместить​ в каталоге C:Documents​ будет перехват ошибок​ с индексом​ имя переменной, или​Run-time error ’11’: Division​ информацию о характере​ в зависимости от​ = «Ошибка 1″​ выглядеть так: Sub​2. Я для​ Resume Next For​ If Err.Number >​ переходим на End​ не найден» . ​ кода и для​ это происходит с​ этот файл в​

​ and Settings Sub​​ и написание кода​11​ можно открыть окно​ by zero​ и причине ошибки.​
​ статуса режима​ ‘End If End​ test() Dim i%,​ этого вставил условие​ i = 1​ 0 Then Cells(i,​ Sub.​ Case Else MsgBox​ другой части кода?​ ошибками компиляции и​ нужную папку. После​ Set_Values(Val1 As Double,​ VBA, который будет​.​ отслеживания локальных переменных​«.​Например, сообщение «​Auto Syntax Check​ Sub​ x# [B:B].ClearContents For​ If Err.Number >​ To 10 If​ 2).Value Другая ошибка» End​Если можно, то​ выполнения.​
​ того, как пользователь​ Val2 As Double)​ выполняться при их​

Читайте также:
Как в программе либре офис перевернуть страницу на альбомную

​11​​ (в меню редактора​В зависимости от структуры​Compile error: Variable not​
​.​Евгений​ i = 1​

​ 0 Then . ​​ Cells(i, 1).Value >​ 1″ End If​ ошибка в условии​ Select​ напишите как. Буду​
​Например, при создании макроса​ сделает это и​ Dim DataWorkbook As​ возникновении. Таким образом,​Деление на ноль (Division​

​View​​ проекта VBA, может​ defined​Примечание:​: Спасибо за подробное​ To 10 On​ End If​ 3 Then If​ End Sub​

​ If, то переходим​​Busine2009​ очень признательным.​
​ в процедуре случайно​​ нажмёт​ Workbook On Error​ вместо неприятных сбоев​ by zero)​>​
​ быть предложено выполнить​» при попытке запустить​При включённом режиме​ объяснение, всё работает​ Error GoTo errH1​​Евгений​​ Err Then Cells(i,​KuklP​ на Netx.​: Вот конкретный пример:​Abu​ были просуммированы не​ОК​
​ GoTo ErrorHandling ‘Открываем​ будет происходить изящное​13​Locals Window​ отладку кода (как​ выполнение кода VBA​Auto Syntax Check​А то у​ x = 1​: Задам немного другой​ 2).Value = Err.Description:​: Так не проще?:​Прошу помочь разобраться​Sub HeaderCopy() On​: Можно!​ те переменные, которые​, выполнение кода продолжится,​ рабочую книгу с​ завершение работы макроса.​Несоответствие типа (Type mismatch)​).​ показано на рисунке​ говорит о том,​каждый раз, при​ Уокенбаха такого не​ / Int(Rnd *​ вопрос: как сделать​ Err.Clear: Exit Sub​Sub test() Dim​ почему на срабатывает​ Error GoTo footercopy​Можно так​ требовалось просуммировать. Результат​ и попытка открыть​ данными Set DataWorkbook​Для того, чтобы помочь​Эта ошибка возникает при​Коды различных ошибок выполнения​ ниже). В этом​ что происходит попытка​ появлении в редакторе​

​ написано​​ 5) ‘ошибка с​ так, что в​
​ x = 1​ i%, x# [B:B].ClearContents​ макрос​

​ Selection.HomeKey Unit:=wdStory ActiveWindow.ActivePane.View.SeekView​

Источник: my-excel.ru

Редактор вба позволяет автоматически обнаруживать в программах следующие виды ошибок

Поискав по рунету материал на тему обработки ошибок в VBA, не увидал на первых двух страницах результатов поиска чего-то, что мне понравилось. Может плохо смотрел, но решил написать на эту тему свою статью.

Простите, но — немного словоблудия 🙂

Ошибки в программе

Ошибки времени исполнения программы возникают, когда среда программирования не может выполнить то, что вы хотите. Таких ситуаций может быть много. Например:

  1. Вы обращаетесь к объекту по имени, а объекта с таким именем в коллекции нет
  2. Вы хотите выделить ячеку на одном листе, а этот лист в данный момент не является активным (типичнейшая ошибка новичков в Excel VBA)
  3. Вы хотите удалить отфильтрованные автофильтром строки, а фильтр вообще не вернул записей и удалять нечего
  4. Вы ссылаетесь на элемент массива, который находится за пределами его границ.
  5. Вы пытаетесь присвоить переменной значение, которое оно не может хранить. Например, переменной типа Long нельзя присвоить строковую константу или переменной типа Integer присвоить знанчение превышающее число 32767 .

На любую из этих и сотни других ситуаций среда выполнения реагирует стандартно — прерывает ход выполнения программы на том операторе, где возникла ошибка или, как ещё принято говорить, исключение. На экран выводится информация о возникшей ошибке и предлагаются стандартные варианты для продолжения работы:

  • Continue (продолжить) — этот пункт во время возникновения ошибки всегда не активен. Он активен, когда по ходу выполнения программы вы использовали оператор Stop . Кстати это очень полезный оператор для отладки программы.
  • End (завершить) — завершение исполнения программы
  • Debug (отладка) — переход в режим отладки, в котором можно посмотреть, на каком операторе возникла ошибка, что содержат переменные, можно даже перетащить жёлтую полоску, подсвечивающую текущий оператор, назад, и модифицировать знанчение переменных через окно Immediate window (впрочем это экзотика). В общем случае кнопка Debug позволяет посмотреть, где случилась ошибка и попытаться понять почему так случилось.

Если вы — автор программы, в которой случилась ошибка, то вы, должно быть, в начале будете рады увидеть подобное окно, ибо только так вы сможете отловить основные ошибки, скрытые в вашем коде. Однако, если эту ошибку видит пользователь, то для него это, мягко говоря, безрадостное и малопонятное зрелище. Ещё хуже, если за эту программу вам заплатили деньги. Поэтому в среде худо-бедно профессиональных программистов принято предусматривать обработку ошибок в своих программах.

Почему вообще в коде возникают ошибки?

  1. Много ошибок во время написания кода возникает по невнимательности или не совсем адекватного понимания того, что делаешь. Таких ошибок, как правило, очень много, особенно у начинающих программистов, но эти ошибки довольно легко отловить и исправить, так как, пока вы их не исправите, ничего не работает. Ну, например, вы должны извлечь данные из 5-го столбца, а вы извлекаете из 6-го, а их там банально нет. Ясно, что вы это очень быстро заметите.
  2. Вторая группа ошибок — это ошибки оптимиста. Когда программа написана в целом правильно, но алгоритм не готов к ударам судьбы в виде неожиданных действий со стороны пользователя, ошибок ввода-вывода (вы рассчитывали считать данные из файла, а файла с таким именем не оказалось, либо он заблокирован другим приложением), особенностей конфигурации компьютера (разные версии ОС или офиса, которые в некоторых мелочах отличаются).
  3. Тонкие логические ошибки. Чем сложнее программа, тем больше шансов, что модель задачи в вашей голове, ваша программа и реальность не совсем согласованы между собой. Пока вы не достигните достаточного погружения в задачу вы такие ошибки не найдёте и не исправите. Порой на это уходит много времени. Но это характерно для сложных задач.
  4. Ошибки на стыке вашего приложения и сервисов ОС, приводящие к неожиданным крахам приложения. Такого вообще возникать не должно, но как мы понимаем, и ОС и офис содержат ошибки, да и вы (что более вероятно) можете пользоваться системными вызовами не правильно. Подобные ошибки — сущий кошмар, особенно когда они проявляются лишь на некоторых конфигурациях, при определенных условиях, их трудно поймать и надёжно воспроизвести.

Задачи механизмов обработки ошибок

  1. Обеспечить стабильную работу программы . Возникновение ошибки, появление которой вы не предусмотрели, приведёт в большинстве случаев к аварийному завершению всей программы или её части. При определенном уровне подобных ситуаций это ведёт к тому, что программой пользоваться становится невозможно.
  2. Информирование . Мало обработать ошибку и предотвратить завершение программы. Надо ещё и адекватно проинформировать пользователя о причинах нестандартного поведения программы. Частно причиной ошибок в программе являются некорректные действия пользователя, поэтому важно сообщать ему о них.
  3. Защита данных от повреждения . Программа обязана защищать от непреднамеренных повреждений результаты своей или пользовательской работы. Деструктивные действия должны быть снабжены соответствующими предупредительными диалоговыми окнами. Часто ошибка, не обработанная должным образом может повредить нужные данные.
Читайте также:
Программа инструкция проведения вводного инструктажа

Файл примера

Скачать

Код без обработки ошибок

Вот простой пример с потолка. Если вызвать Example_00 , то она прекрасно отработает без ошибок и вернёт это:

В функцию GetCalories передаётся строка с блюдом, а она должна вернуть его калорийность, сверившись с таблицей в A1:B7 .

Давайте поищем слабые места в этом коде. Первое, что должно прийти в голову — если мы ищем, то, что произойдёт, если мы не найдём? А произойдёт, конечно же, ошибка. Её инициирует метод Match .

Ещё одно слабое место этой подпрограммы: функция возвращает вещественный тип Double , и даже, если поиск оказался удачным, то в Cells(intRow, 2) может случайно находиться текстовая строка, а потому, когда вы числовому типу попытаетесь присвоить строковый тип, также произойдёт ошибка. И, если вы второй ошибки сможете избежать за счёт дополнительного оператора if с проверкой через IsNumber (), то избежать первой ошибки таким способом нельзя. Что же делать? А вот тут на сцену выходят операторы обработки ошибок.

Есть 2 подхода к обработке ошибок: автономный подход и выносной . Эти термины я придумал только что, чтобы проще было их обсуждать.

Автономный подход

Смысл автономного подхода в том, чтобы не выносить сор из избы. Если в подпрограмме возникла ошибка, то мы должны предположить, на каком месте она возникнет и поджидать её там с дубиной. С ошибкой, в этом случае, разбираются обычно в операторе, идущем сразу после потенциально опасного места. Давайте смотреть, как это может выглядеть:

Итак, что тут сделано:

  1. Сразу после объявления функции GetCalories_v1 идёт оператор on error resume next , который в случае возникновения в каком-либо месте ошибки, предписывает VBA просто передавать управление на следующий оператор, идущий после ошибочного.
  2. Мы объявили переменные. Необъявленные переменные получают тип Variant и значение по умолчанию Empty . Объявленные переменные числовых типов инициируются нулём, строковые — пустой строкой, то есть я наперёд знаю, что они содержат, а это хорошо для обработки ошибок.
  3. На вызове метода WorksheetFunction.Match у нас возникает ошибка, так как искомого значения в таблице нет. А это, между прочим, был оператор присваивания ( = ). Прежде, чем левой части оператора присваивания ( intRow ) что-то будет присвоено, необходимо вычислить правую часть оператора присваивания ( WorksheetFunction.Match . ), а поскольку в процессе этого вычисления возникает ошибка, то переменная intRow остаётся такой, какой была! А, как я уже сказал, VBA автоматически её инициализирует нулём до начала исполнения подпрограммы. Получается, что, если в этом операторе возникнет ошибка, то в intRow будет ноль. Если ошибки во время поиска не возникнет, то ноля там не будет ни при каких раскладах, так как строки на листе нумеруются с единицы.
  4. И вот этот ноль мы и контролируем, добавляя оператор If . Если intRow больше нуля, то WorksheetFunction.Match отработала штатно, а если нет — то работу подпрограммы надо прерывать, но об этом чуть позже.
  5. Далее мы помним, что Cells(intRow, 2) может теоретически вернуть строковое значение, которое вызовет ошибку Type missmatch при присвоении переменной типа Double ( GetCalories_v1 ), поэтому мы вставляем дополнительную проверку промежуточной переменной varTemp тому, что она числовая. И если это так, то присваиваем GetCalories_v1 значение из varTemp .
  6. В случае возникновения любой ошибки внутри GetCalories_v1 она просто вернёт ноль. Почему ноль? Потому что переменная GetCalories_v1 тоже инициализируется нулём и об этом не надо заботиться, а в случае ошибки она останется в неприкосновенности.
  7. Соответственно родительский код (в нашем случае его роль играет процедура Example_01 ) должен проверить, а не вернёт ли GetCalories_v1 ноль, и быть готовым к этой ситуации.
  8. А вот теперь тонкий момент, который не все понимают. Почему я использовал промежуточные переменные intRow и varTemp ? Вроде бы есть очевидный ответ — чтобы не вычислять значение выражений с Match и Cells 2 раза. Отчасти это, конечно, так. Но это, в данном случае, не главная причина. Главная причина в том, что такой код вызовет неправильное поведение программы. Если у нас Match вызовет исключение, то VBA передаст управление на СЛЕДУЮЩИЙ оператор, а следующий оператор в данном случае это то, что идёт после Then — присваивание переменной varTemp значения. Таким образом наша проверка на наличие ошибки сработает с точностью до наоборот, передав управление в ту часть кода, которая должна быть защищена от ситуации, когда Match не нашла строку в таблице. Вот почему важно в операторе If не иметь ничего такого, что могло бы вызвать ошибку.
  9. Как видите, в этом подходе мне зачастую даже нет необходимости проверять объект Err , чтобы понять, что произошла ошибка, так как я ориентируюсь на то, что промежуточные переменные остаются неинициализированными, что является показателем наличия ошибки.

Выносной подход

VBA Обработка ошибок — Различные типы ошибок в Excel VBA

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

Различные типы ошибок в VBA

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

Вышеуказанные ошибки могут быть исправлены с помощью нижеупомянутой отладки и различных операторов ‘On Error’, вставленных между кодом.

При ошибке возобновить следующее

При ошибке Перейти к 0

При ошибке Перейти к

При ошибке Перейти -1

Обработка ошибок VBA с помощью различных операторов ‘ON ERROR’

Вы можете скачать этот шаблон VBA для обработки ошибок Excel здесь — Шаблон VBA для обработки ошибок Excel

Пример № 1 — ошибки компиляции VBA

При возникновении ошибки в утверждении или синтаксисе кода VBA, при неправильном вводе кода по ошибке он будет выделен красным цветом в зависимости от параметров настройки в инструментах (если вы выбрали автоматическую проверку синтаксиса).

При запуске кода с неправильным синтаксисом появится всплывающее сообщение об ошибке компиляции.

Код:

Sub SYNTAX_ERROR () MsgBox это моя первая программа End Sub

«ОШИБКА КОМПИЛЯЦИИ: ПЕРЕМЕННАЯ НЕ ОПРЕДЕЛЕНА» — это самая распространенная ошибка, которая появляется во всплывающем сообщении. когда ссылочная переменная не определена, возникает эта ошибка.

Читайте также:
Программа чтобы накачать руки в домашних условиях

Код:

Sub VBA_FORMAT1 () A = 19049.83 A = Формат (A, «СТАНДАРТ») MsgBox A End Sub

В приведенном выше примере я не объявил тип переменной как String, поэтому возникает эта ошибка. Итак, мне нужно объявить переменную как Dim A As String.

Код:

Sub VBA_FORMAT1 () Dim A As String A = 19049.83 A = Формат (A, «СТАНДАРТ») MsgBox A End Sub

Пример №2 — Ошибка выполнения VBA

Когда невозможные математические операторы или термины присутствуют в операторе, возникает ошибка во время выполнения.

Код:

Sub RUNTIME_1 () MsgBox 6/0 End Sub

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

Эти ошибки очень трудно отследить, они не подсвечиваются и не появляется всплывающее сообщение об ошибке. это приведет к неожиданным действиям и неправильным результатам.

Пример: если в коде присутствуют две переменные, они могут содержать неверную. В этом случае возникает логическая ошибка.

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

Давайте посмотрим, как предотвратить различные типы ошибок в VBA Excel.

Шаг 1: Чтобы открыть окно редактора VB Выберите или щелкните Visual Basic в группе « Код » на вкладке « Разработчик », или вы можете напрямую нажать сочетание клавиш Alt + F11 .

Шаг 2. Чтобы создать пустой модуль, в объектах Microsoft Excel щелкните правой кнопкой мыши лист 1 (VB_ERROR HANDLING) и вставьте модуль, чтобы создать новый пустой модуль.

Обработка ошибок VBA с опцией отладки

Лучше скомпилировать код, прежде чем мы его запустим. Чтобы выполнить компиляцию, необходимо выполнить следующие шаги. На панели инструментов меню VB под опцией Debug нам нужно выбрать компилируемый проект VBA. Когда вы нажимаете на него, он проверяет код шаг за шагом, как только он находит ошибку, он выделяет ее и появляется всплывающее сообщение, поэтому вам необходимо исправить его. как только это исправлено, вам нужно скомпилировать, чтобы найти следующую ошибку в коде.

Примечание. С помощью опции компиляции мы можем только исправить ошибку компиляции и синтаксиса.

Обработка ошибок VBA с помощью различных операторов ‘ON ERROR’

1. При ошибке возобновить следующее

Здесь ошибка будет игнорироваться, и код будет двигаться дальше.

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

Код:

Sub RUNTIME_1 () MsgBox 6/0 End Sub

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

Код:

Sub RUNTIME_2 () При ошибке Возобновить Далее MsgBox 6/0 MsgBox 6/2 End Sub

2. При ошибке GoTo 0 и Error GoTo -1

«On Error GoTo 0» остановит код в конкретной строке, которая вызывает ошибку, и отобразит окно сообщения, которое описывает или указывает на ошибку.

Код:

Sub onError_Go_to_0 () При ошибке GoTo 0 Убить диапазон «C: TempFile.exe» («A1»). Значение = 100 / «PETER» End Sub

Как правило, он демонстрирует поведение проверки ошибок по умолчанию, это важно, когда он используется вместе с «On Error Resume Next».

Обычно вы можете наблюдать окно сообщения об ошибке во время выполнения, содержащее опции «Продолжить», «Конец», «Отладка» и «Справка» . давайте проверим использование каждого из них.

  • Опция Continue проигнорирует исключение и продолжит код, если это возможно.
  • Опция end завершает программу.
  • Опция отладки подсвечивает оператор, в котором произошла ошибка. который помогает вам отладить или исправить код.
  • Параметр Справка откроет страницу справки Microsoft MSDN.

On Error GoTo 0 с On Error Resume Next

Код:

Sub onError_Go_to_0_with_Resume_next () При ошибке Resume Next Kill «C: TempFile.exe» При ошибке GoTo 0 Range («A1»). Значение = 100 / «PETER» End Sub

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

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

3. При ошибке GoTo

VBA для передачи управления программой в строку, за которой следует метка, если обнаружены какие-либо ошибки во время выполнения, т. Е. Код переходит к указанной метке. Здесь операторы кода между строкой исключения и меткой не будут выполняться.

Этот метод более подходит и важен для корректного выхода из программы, если во время выполнения возникает серьезная фатальная ошибка.

В приведенном ниже коде VBA, как только ошибка возникает в строке 3, программа передает управление в строку 6, т. Е. Метку (всплывающее сообщение отображается как «Обработчик исключения» ).

Код:

Sub OnError_Go_to_Label () При ошибке GoTo Обработчик ошибок: MsgBox 9/0 MsgBox

Здесь вы можете заметить, что «Exit Sub» следует использовать непосредственно перед меткой «Error_handler:», это делается для того, чтобы блок кода обработчика ошибок останавливался или не выполнялся, если нет ошибки. Теперь вы можете сохранить свою книгу как «книгу с поддержкой макросов Excel». Кликните на сохранить как в левом углу листа.

Еще раз, если вы откроете файл, вы можете нажать на клавишу быстрого доступа, например, Fn + Alt + f8, появится диалоговое окно «Макрос», где вы можете запустить сохраненный код макроса по вашему выбору или вы можете нажать Fn + Alt + F11 для полное окно макроса.

То, что нужно запомнить

  • Прежде чем писать код, вы должны убедиться, что разрыв необработанных ошибок проверен или выбран по ошибке. опция захвата под общим в настройках инструмента панели инструментов VBA.
  • Это настройка по умолчанию, которая помогает остановить ваш код для ошибок, которые не обрабатываются.
  • Разбить все ошибки: он остановит ваш код на всех типах ошибок.
  • Модуль класса взлома: в случае использования в коде такого объекта, как пользовательская форма, будет выделена точная строка, вызывающая ошибку.

Рекомендуемые статьи

Это руководство по обработке ошибок VBA. Здесь мы обсудим, как использовать обработку ошибок VBA в Excel вместе с некоторыми практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. VBA Объявление массива (примеры)
  2. VBA при ошибке
  3. VBA Незащищенный лист
  4. VBA Колонны | Шаблоны Excel
  5. VBA Environ

Источник: ru.education-wiki.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru