Речь идёт о номерах ошибок в объектах. В MSDN есть пример для оператора On Error:
https://learn.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/on-error-statement
Этот пример не работает. При попытке его исправить, обнаружил, что к константе vbObjectError необходимо добавлять 44.
- Код: Выделить всё
Sub OnErrorStatementDemo()
On Error GoTo ErrorHandler ' Включаем обработчик ошибок.
Dim Msg As String
Dim ObjectRef As Object
Open "TESTFILE" For Output As #1 ' Открываем файл для записи.
Kill "TESTFILE" ' Пытаемся удалить открытый фалй.
On Error GoTo 0 ' Выключаем обработчик ошибок.
On Error Resume Next ' Включаем новый обработчик ошибок.
' Пытаемся запустить несуществующий
Set ObjectRef = GetObject("MyWord.Basic") ' объект, а потом
Select Case Err.Number ' проверяем наличие ошибки.
' Здесь мне пришлось добавить 44 к константе
' vbObjectError. Без этого номер ошибки не соответствует её описанию.
Case vbObjectError + 44 + 432
Msg = "432. Не найдено имя файла или класса "
Case vbObjectError + 44 + 440
Msg = "440. Ошибка программирования объектов "
Case Else
Msg = Err – vbObjectError - 44 & ". Произошла ошибка "
Msg = Msg & Err.Description
End Select
' Выдаём сообщение об ошибке
Msg = Msg & "при попытке открыть объект Automation!"
MsgBox Msg, vbExclamation + vbMsgBoxHelpButton, _
"Тестирование обработчика ошибок", _
Err.HelpFile, Err.HelpContext
Err.Clear ' Очищаем свойства объекта Err
Set ObjectRef = Nothing
Exit Sub ' ВЫХОД ИЗ ПРОЦЕДУРЫ.
ErrorHandler: ' ОБРАБОТЧИК ОШИБОК.
Select Case Err.Number ' Проверяем номер ошибки.
Case 55 ' Если "Файл уже открыт",
Close #1 ' то закрываем файл.
Case Else
' Здесь обрабатываем все прочие ситуации
End Select
Resume ' Возобновляем выполнение с места,
' где произошла ошибка.
End Sub