Visual Basic for Applications:
Обработка ошибок

Как:

В VBA обработка ошибок обычно реализуется с использованием инструкции On Error, которая указывает VBA, как следует процедить при возникновении ошибки. Наиболее распространенные стратегии обработки ошибок включают в себя On Error GoTo метка, On Error Resume Next, и On Error GoTo 0.

Пример 1: Использование On Error GoTo

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

Sub ErrorHandlerExample()
    On Error GoTo ErrHandler
    Dim intDivision As Integer

    intDivision = 5 / 0 ' Это вызовет ошибку деления на ноль

    Exit Sub
ErrHandler:
    MsgBox "Произошла ошибка: " & Err.Description, vbCritical, "Ошибка!"
    Resume Next
End Sub

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

Пример 2: Использование On Error Resume Next

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

Sub ResumeNextExample()
    On Error Resume Next
    Dim intDivision As Integer
    intDivision = 5 / 0 ' Это не остановит программу; ошибка игнорируется
    
    ' Проверяем, произошла ли ошибка
    If Err.Number <> 0 Then
        MsgBox "Произошла ошибка: " & Err.Description, vbExclamation, "Обработанная Ошибка"
        ' Сброс ошибки
        Err.Clear
    End If
End Sub

В этом случае программа не прерывается из-за ошибки; она проверяет, произошла ли ошибка, обрабатывает ее, если это так, а затем сбрасывает ошибку.

Глубокое погружение

Исторически обработка ошибок в языках программирования эволюционировала от простых операторов goto к более сложным механизмам, таким как исключения, в языках, таких как Java и C#. Обработка ошибок в VBA, хотя и не так мощная или гибкая, как современная обработка исключений, выполняет свою функцию в контексте применения языка для автоматизации задач в средах Microsoft Office.

Основное ограничение обработки ошибок в VBA заключается в его несколько громоздком и ручном подходе, требующем тщательного размещения кода обработки ошибок и четкого понимания потока выполнения. Современные языки программирования обычно предлагают более элегантные решения, такие как блоки try-catch, которые автоматически управляют потоком к коду обработки ошибок без необходимости ручных проверок или прыжков в выполнении кода.

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