Номера ошибок в объектах. Константа vbObjectError.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
nouyana
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 104
Зарегистрирован: 29.01.2016 (Пт) 17:42

Номера ошибок в объектах. Константа vbObjectError.

Сообщение nouyana » 24.04.2023 (Пн) 19:38

Добрый день. Обнаружил тут одну странность (если не сказать - ошибку) в VB. На форуме, вроде, не говорили об этом ещё.

Речь идёт о номерах ошибок в объектах. В 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

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 5

    TopList