Ребята, всем привет! 👋
Продолжаем изучать VBA. В прошлом уроке мы разбирали обработку ошибок VBA. Продолжим данную тему, и сегодня разберем типы ошибок VBA. Сегодня в уроке:
- Ошибки во время выполнения
- Синтаксические ошибки
- Ошибки компиляции
- Ошибка переполнения
- Ошибка перехвата VBA
- Как игнорировать ошибку
- VBA выдает ошибку / Err.Raise
- Обработка ошибок VBA в цикле
✨ А прежде, чем мы начнем 📣 напомню, теперь у нас на канале есть удобный рубрикатор 👉 Быстрый поиск решения. Путеводитель по Excel, а все видео 📽 предыдущих уроков доступны и на YouTube.
☑️ Ошибки во время выполнения
Как мы рассматривали ранее:
Ошибки времени выполнения VBA - это ошибки, возникающие во время выполнения кода. Примеры ошибок во время выполнения включают:
- Ссылка на несуществующую книгу, рабочий лист или другой объект
- Недопустимые данные, например, ссылка на ячейку Excel, содержащую ошибку
- Попытка деления на ноль
Вы можете “обрабатывать ошибки” во время выполнения, используя методы, описанные в первой части урока.
☑️ Синтаксические ошибки
Синтаксические ошибки VBA - это ошибки при написании кода. Примеры синтаксических ошибок включают:
- Неправильный ввод
- Пропущенная или неправильная пунктуация
Редактор VBA выделяет многие синтаксические ошибки красным цветом:
В редакторе VBA также есть опция “Автоматической проверки синтаксиса”:
Если этот флажок установлен, редактор VBA сгенерирует окно сообщения с предупреждением о синтаксических ошибках после ввода строки кода:
🔔 Синтаксические ошибки являются подмножеством ошибок компиляции.
☑️ Ошибки компиляции
Прежде чем пытаться запустить процедуру, VBA “скомпилирует” процедуру.
см. подробнее: Ошибка компиляции VBA
Компиляция преобразует программу из исходного кода (который вы можете видеть) в исполняемую форму (которую вы не видите).
Ошибки компиляции VBA - это ошибки, которые препятствуют компиляции кода.
Хорошим примером ошибки компиляции является пропущенное объявление переменной
Другие примеры включают:
- For without Next
- Select without End Select
- If without End If
- Calling a procedure that does not exist
⏩ Отладка> Компиляция
Ошибки компиляции будут появляться при попытке запустить процедуру. Но в идеале вы должны выявлять ошибки компиляции до попытки запуска процедуры.
Вы можете сделать это, скомпилировав проект заранее. Для этого перейдите в раздел "Отладка"> "Скомпилировать проект VBA".
Компилятор “перейдет” к первой ошибке.
Как только вы исправите эту ошибку, скомпилируйте проект снова.
⚠️ Повторяйте, пока все ошибки не будут исправлены.
Вы можете сказать, что все ошибки исправлены, потому что скомпилированный проект VBA будет выделен серым цветом:
☑️ Ошибка переполнения
Ошибка переполнения VBA возникает при попытке ввести значение в слишком большую переменную.
Например, целочисленные переменные могут содержать только значения от -32 768 до 32 768.
Если вы введете большее значение, вы получите сообщение об ошибке переполнения:
Решение:
Вместо этого вы должны использовать длинную переменную для хранения большего числа.
☑️ Ошибка перехвата VBA
В отличие от других языков программирования, в VBA нет оператора Catch. Однако вы можете воспроизвести оператор Catch, используя On Error Resume Next и If Err.Number <> 0 Then . Это описано выше в разделе Обработка ошибок с помощью Err.Number.
☑️ Как игнорировать ошибку
Чтобы игнорировать ошибки в VBA, просто используйте следующий оператор On Error Resume:
🔘 On Error Resume Next
⚠️ ВНИМАНИЕ! Как упоминалось ранее, вы должны быть осторожны с использованием этого оператора, поскольку он не исправляет ошибку, он просто игнорирует строку кода, содержащую ошибку.
☑️ VBA выдает ошибку / Err.Raise
Для устранения ошибки в VBA используется метод Err.Raise .
Эта строка кода вызовет ошибку времени выполнения ’13’: несоответствие типов:
🔘 Err.Raise (13)
☑️ Обработка ошибок VBA в цикле
Лучший способ обработки ошибок в цикле - использовать On Error Resume Next вместе с Err.Number, чтобы определить, произошла ли ошибка (не забудьте использовать Err.Clear для устранения ошибки после каждого возникновения).
В приведенном ниже примере мы разделим два числа (столбец A на столбец B) и выведем результат в столбец C. Если произошла ошибка, результат будет равен 0:
🔔 Для получения дополнительной информации об обработке ошибок VBA рекомендуем:
- Ошибка 1004 VBA - ошибка, определяемая приложением или объектом
- Несоответствие типа VBA (ошибка времени выполнения 13). Часть 1
- Несоответствие типа VBA (ошибка времени выполнения 13). Часть 2. Исправляем ошибки
- Как использовать VBA при возобновлении работы с ошибкой Next и при ошибке Goto 0
- Ошибка компиляции VBA
А на этом сегодня все. 👏 Продолжение следует...
Подписывайтесь на канал, чтобы не пропустить новые уроки и полезные фишки Excel. Следите за нашими новостями и вы узнаете больше о VBA и Excel в частности.
📝 Нам очень важна Ваша обратная связь. Отзыв по уроку и любые вопросы пишите в комментариях.
💝 А если у Вас пока нет вопросов, но вы дочитали данную статью до конца оставьте в комментариях просто смайлик 😉 (автору будет приятно)
И конечно же, за лайк 👍 и репост 🔁 данного поста благодарочка 💖 и респект 🤝 каждому!