Skip to content
Хронотехник
Menu
  • Главная
  • О Хронотехнике
  • Рассказы
  • Новости
  • Фотография
  • VBA
Menu
ошибка VBA

Зачем в VBA обработка ошибок, или Как перестать бояться сообщений от программы

Posted on 14.11.202515.11.2025 by admin

Содержание

Toggle
  • Как выглядит этот «спасательный круг» в коде VBA?
  • А какие вообще бывают варианты обработки ошибок?
  • Почему это так важно?

Представьте: вы идеально написали код на VBA, запускаете его, и тут — бац! — появляется непонятное окно с ошибкой «Run-time error ’13’». Программа замирает, а вы остаётесь один на один с этим сообщением. Знакомая ситуация?

Ошибка VBA с вызовом отладчика
Иллюстрация к статье про VBA. Ошибка с вызовом отладчика

Так вот, обработка ошибок — это ваш способ сказать программе: «Эй, если что-то пойдёт не так, не паникуй! Скажи мне спокойно, в чём дело, и мы вместе решим проблему».

Как выглядит этот «спасательный круг» в коде VBA?

Вот простейший пример. Допустим, ваш код пытается открыть файл, которого нет:

vba

Sub ОткрытьФайл()
    ' Включаем "режим спокойствия"
    On Error GoTo ОбработчикОшибки
    
    ' Пытаемся сделать что-то рискованное
    Workbooks.Open "C:\Отчёт_которого_нет.xlsx"
    
    ' Если всё хорошо, выходим
    Exit Sub

ОбработчикОшибки:
    ' А если ошибка — спокойно объясняем пользователю
    MsgBox "Файл не найден! Проверьте путь и название.", vbExclamation
End Sub

Видите магию? Теперь вместо грубого «Runtime error 1004» пользователь получает вежливое человеческое объяснение. И программа не «висит» в ожидании — она продолжает работать!

А какие вообще бывают варианты обработки ошибок?

Самый простой — как в примере выше. Но есть и другие полезные подходы.

Например, можно просто проигнорировать ошибку и продолжить выполнение:

vba

Sub ПроигнорироватьОшибку()
On Error Resume Next ' "Продолжай, даже если ошибся"

' Если файла нет — ничего страшного, работаем дальше
Workbooks.Open "C:\Необязательный_файл.xlsx"

' Проверяем, открылся ли файл
If Err.Number <> 0 Then
MsgBox "Не удалось открыть файл, но это не критично"
Err.Clear ' Очищаем ошибку
End If

' Код продолжает выполняться
Call ОсновнаяРабота
End Sub
Иллюстрация к статье про VBA
Иллюстрация к статье про VBA

А можно сделать «умный» код, который пытается разные варианты:

vba

Sub УмноеОткрытие()
    On Error GoTo Обработчик
    
    ' Пытаемся открыть файл 2025 года
    Workbooks("2025_Доходы_расходы.xls").Open
    Exit Sub

Обработчик:
    ' Если не получилось — пробуем файл 2024 года
    Workbooks("2024_Доходы_расходы.xls").Open
    MsgBox "Работаем с данными прошлого года"
End Sub

Почему это так важно?

Представьте разницу:

  • Без обработчика: программа аварийно закрывается, пользователь в панике
  • С обработчиком: программа вежливо сообщает о проблеме и предлагает решение

Обработка ошибок — это как страховка для вашего кода. Вы надеетесь, что она не понадобится, но спокойны, зная, что она есть.

Начните с самого простого — добавьте базовую обработку ошибок в те процедуры, которые работают с файлами или внешними данными. Вы сразу заметите, насколько профессиональнее стал выглядеть ваш код!

Иллюстрация к статье про VBA
Иллюстрация к статье про VBA

И помните: идеальный код — не тот, в котором никогда нет ошибок, а тот, который умеет их грациозно обрабатывать.

P.S. Ранее мы уже разбирали некоторые приёмы улучшения кода VBA — например, как заменить громоздкие операторы If на элегантный Select Case. Если вы пропустили тот разговор — загляните на мой канал, там есть много полезного для тех, кто хочет писать код не только работающий, но и красивый.

А в следующий раз поговорим о том, как заставить VBA общаться с другими программами — это откроет совсем новые горизонты для автоматизации. Обещаю, будет интересно!