Ошибка треппинга с помощью Visual Basic для приложений

Переводы статьи Переводы статьи
Код статьи: 146864 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

При возникновении ошибки во время выполнения в Microsoft Visual Basic для приложений макроса появляется сообщение об ошибке на экране и макрос Останавливает или непредсказуемый характер.

Чтобы приложение аварийное завершение работы или поведение непредсказуемо, можно включить код макроса, перехватывает ошибку и способы макрос для ее обработки. Процесс intercepting и обработки ошибок времени выполнения, называется «перехват ошибок». Набор инструкции, которые указывает приложению, как обрабатывать ошибки называется «обработчик ошибок» или «обработчик ошибок».

Дополнительная информация

Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации Это включает, но не ограничивается, подразумеваемые гарантии товарности или пригодности для определенной цели. В данной статье предполагается, что вы знакомы с языком программирования предложенном и с помощью средств, которые используются для создания и отладки. Сотрудники службы поддержки Майкрософт могут пояснить конкретной процедуры, но они будут изменять примеры для реализации дополнительных возможностей или удовлетворения конкретных требований. Во время выполнения код Visual Basic может возникают различные типы ошибок, которые могут быть перехвачены. Вы сможете воспользоваться перехвата ошибок в Microsoft Excel с помощью следующих функций и операторы.

Оператор On Error

Оператор On Error вызывает Visual Basic для приложений Запуск или остановка сообщение об ошибке. Оператор On Error также определяет набор операторы для выполнения, если происходит ошибка.

Для дополнительной сведения, обратитесь к следующим статьям Microsoft Knowledge Base:
141571Использование "On Error" обрабатывающих ошибки в макросе

Ошибка функции

Функция Err возвращает количество произошла ошибка.

Пример использования функции Err:
   Msgbox "The most recent error number is " & Err & _
      ". Its message text is: " & Error(Err)
				
Следующая таблица содержит список Перехватываемая ошибка кодов, которые могут возникнуть при использовании функции Err.
   Error code   Error message
   ----------   -------------
   3            Return without GoSub
   5            Invalid procedure call
   6            Overflow
   7            Out of memory
   9            Subscript out of range
   10           Duplicate definition (versions 5.0 and 7.0)
   10           This array is fixed or temporarily locked (version97)
   11           Division by zero
   13           Type mismatch
   14           Out of string space
   16           String formula too complex (versions 5.0 and 7.0)
   16           Expression too complex (version 97)
   17           Can't perform requested operation
   18           User interrupt occurred
   20           Resume without error
   28           Out of stack space
   35           Sub or function not defined (versions 5.0 and 7.0)
   35           Sub, function, or property not defined (version 97)
   47           Too many DLL application clients (version 97)
   48           Error in loading DLL
   49           Bad DLL calling convention
   51           Internal error
   52           Bad file name or number
   53           File not found
   54           Bad file mode
   55           File already open
   57           Device I/O error
   58           File already exists
   59           Bad record length
   61           Disk full
   62           Input past end of line
   63           Bad record number
   67           Too many files
   68           Device unavailable
   70           Permission denied
   71           Disk not ready
   74           Can't rename with different drive
   75           Path/File access error
   76           Path not found
   91           Object variable not set (versions 5.0 and 7.0)
   91           Object variable or With block variable not set
                (version 97)
   92           For Loop not initialized
   93           Invalid pattern string
   94           Invalid use of Null
   95           User-defined error (versions 5.0 and 7.0 only)
   298          System DLL could not be loaded (version 97)
   320          Can't use character device names in specified file names
                (version 97)
   321          Invalid file format (version 97)
   322          Can't create necessary temporary file (version 97)
   323          Can't load module; invalid format (versions 5.0 and 7.0)
   325          Invalid format in resource file (version 97)
   327          Data value named was not found (version 97)
   328          Illegal parameter; can't write arrays (version 97)
   335          Could not access system registry (version 97)
   336          ActiveX component not correctly registered (version 97)
   337          ActiveX component not found (version 97)
   338          ActiveX component did not correctly run (version 97)
   360          Object already loaded (version 97)
   361          Can't load or unload this object (version 97)
   363          Specified ActiveX control not found (version 97)
   364          Object was unloaded (version 97)
   365          Unable to unload within this context (version 97)
   368          The specified file is out of date. This program requires
                a newer version (version 97)
   371          The specified object can't be used as an owner form for
                Show (version 97)
   380          Invalid property value (version 97)
   381          Invalid property-array index (version 97)
   382          Property Set can't be executed at run time (version 97)
   383          Property Set can't be used with a read-only property
                (version 97)
   385          Need property-array index (version 97)
   387          Property Set not permitted (version 97)
   393          Property Get can't be executed at run time (version 97)
   394          Property Get can't be executed on write-only property
                (version 97)
   400          Form already displayed; can't show modally (version 97)
   402          Code must close topmost modal form first (version 97)
   419          Permission to use object denied (version 97)
   422          Property not found (version 97)
   423          Property or method not found
   424          Object required
   425          Invalid object use (version 97)
   429          ActiveX component can't create object or return
                reference to this object (version 97)
   430          Class doesn't support OLE Automation
   430          Class doesn't support Automation (version 97)
   432          File name or class name not found during Automation
                operation (version 97)

   438          Object doesn't support this property or method
   440          OLE Automation error
   440          Automation error (version 97)
   442          Connection to type library or object library for remote
                process has been lost (version 97)
   443          Automation object doesn't have a default value
                (version 97)
   445          Object doesn't support this action
   446          Object doesn't support named arguments
   447          Object doesn't support current locale settings
   448          Named argument not found
   449          Argument not optional
   449          Argument not optional or invalid property assignment
                (version 97)
   450          Wrong number of arguments
   450          Wrong number of arguments or invalid property assignment
                (version 97)
   451          Object not a collection
   452          Invalid ordinal
   453          Specified DLL function not found
   454          Code resource not found
   455          Code resource lock error
   457          This key is already associated with an element of this
                collection (version 97)
   458          Variable uses a type not supported in Visual Basic
                (version 97)
   459          This component doesn't support events (version 97)
   460          Invalid clipboard format (version 97)
   461          Specified format doesn't match format of data
                (version 97)
   480          Can't create AutoRedraw image (version 97)
   481          Invalid picture (version 97)
   482          Printer error (version 97)
   483          Printer driver does not support specified property
                (version 97)
   484          Problem getting printer information from the system.
                Make sure the printer is set up correctly (version 97)
   485          Invalid picture type (version 97)
   486          Can't print form image to this type of printer
                (version 97)
   735          Can't save file to Temp directory (version 97)
   744          Search text not found (version 97)
   746          Replacements too long (version 97)
   1000         Classname does not have propertyname property
                (versions 5.0 and 7.0)
   1001         Classname does not have methodname method
                (versions 5.0 and 7.0)
   1002         Missing required argument argumentname
                (versions 5.0 and 7.0)
   1003         Invalid number of arguments (versions 5.0 and 7.0)
   1004         Methodname method of classname class failed
                (versions 5.0 and 7.0)
   1005         Unable to set the propertyname property of the classname
                class (versions 5.0 and 7.0)
   1006         Unable to get the propertyname property of the classname

                class (versions 5.0 and 7.0)
   31001        Out of memory (version 97)
   31004        No object (version 97)
   31018        Class is not set (version 97)
   31027        Unable to activate object (version 97)
   31032        Unable to create embedded object (version 97)
   31036        Error saving to file (version 97)
   31037        Error loading from file (version 97)
				
Для получения дополнительных сведений обратитесь к следующей статье в в Microsoft Knowledge Base:
142138OFF: Объяснение перехватываемые ошибки в Visual Basic для приложений

Ошибка функции

Возвращает функцию ошибки, соответствующее сообщение об ошибке данному номеру ошибки.

Например, с помощью функции Error:
   Msgbox "The message text of the error is: " & Error(Err)
				

Оператор Error

Оператор Error порождает возникновение ошибки путем позволяет назначить номер пользовательской ошибки функции Err. Этих пользователей- определенные ошибки значений, значений, указанных для процедур и что всегда хранятся в переменных типа данных Variant. Чаще всего это в процедурах, примите несколько аргументов и возвращаемых имеет тип значения ошибки значение. Например, предположим, что возвращаемое значение является допустимым только тогда, когда аргументы попадает в диапазон. Процедуры можно проверить аргументы, предоставляет пользователю, и если аргументы отсутствуют в приемлемом диапазоне, можно у процедуры возвращают значение соответствующей ошибки.

Ошибка Подтип типа данных Variant, а также при использовании термина «ошибка значение» его Обычно это означает, что переменная имеет тип Variant, содержащий значение, которое распознает Visual Basic для приложений в качестве пользовательской ошибки. Чтобы указать, что условия возникновения ошибок в процедуре используются значения ошибки произошло. В отличие от обычных ошибок времени выполнения, эти ошибки не прерывают свой код, так как они будут признаны в качестве обычных переменных и не ошибки. Ваш процедуры можно проверить эти значения ошибок и предпринять соответствующие корректирующих действия.

Можно также использовать оператор Error для имитации во время выполнения ошибки. Эта функция особенно полезна при тестировании приложения, или При необходимости рассматривать как эквивалент выполнения - определенного условия Ошибка во время. Можно имитировать любой Visual Basic для приложений ошибки во время выполнения указав код ошибки для ошибки в оператор Error. Кроме того, можно Используйте оператор Error для создания собственных пользовательских ошибок путем предоставления код ошибки, не относящиеся к Visual Basic для выполнения приложений Ошибка. Ранее в этом появится таблица, содержащая список встроенных ошибок статьи (в разделе «Ошибка функции»). В настоящее время Visual Basic для Приложения не использует все доступные номера для встроенных ошибок. В будет внутреннего номера следующих версиях Visual Basic для приложений Увеличение при построении более - добавляются в ошибки. Рекомендуется начать номера ошибок на 50 000 и рабочих до 65 535 ваш способ избежать возможного конфликты в будущем.

Пример использования оператора Error для имитации Ошибки времени выполнения:
   Sub Test()

      On Error Resume Next
      Error 50000          'set the value of Err to 50000

      If Err = 50000 Then
         MsgBox "my own error occurred"
      End If

   End Sub
				
При запуске макроса теста появляется окно сообщения, содержащий "my собственные ошибка"в виде сообщения.

Функция CVErr

Функция CVErr используется для создания значения ошибок. CVErr функция принимает аргумент, который должен быть целым числом или быть переменной, содержит целочисленное значение.
   NoRadius = CVErr(2010)

   NotANumber = 2020
   InvalidArgument = CVErr(NotANumber)
				
Пример использования функции CVErr:
   Public NoRadius, NotANumber

   Sub AreaOfCircle()
      Const PI = 3.142
      NoRadius = CVErr(2010)
      NotANumber = CVErr(2020)
      Radius = CheckData(InputBox("Enter the radius: "))
      If IsError(Radius) Then
         Select Case Radius
            Case NoRadius
               MsgBox "Error: No radius given."
            Case NotANumber
               MsgBox "Error: Radius is not a number."
            Case Else
               MsgBox "Unknown Error."
         End Select
      Else
         MsgBox "The area of the circle is " & (PI * Radius ^ 2)
      End If
   End Sub

   Function CheckData(TheRadius)
      If Not IsNumeric(TheRadius) Then
         CheckData = NotANumber
      ElseIf TheRadius = 0 Then
         CheckData = NoRadius
      Else
         CheckData = TheRadius
      End If
   End Function
				

С помощью встроенных значений ошибок

Существует семь встроенных ошибки значений в Microsoft Excel. В Следующая таблица показывает номер ошибки (константа), значение литерала ошибки и Ошибка преобразованное значение.
Error number (Constant)   Literal error value     Converted error value
-----------------------------------------------------------------------

xlErrDiv0                   [#DIV/0!]               CVErr(xlErrDiv0)
xlErrNA                     [#N/A]                  CVErr(xlErrNA)
xlErrName                   [#NAME?]                CVErr(xlErrName)
xlErrNull                   [#NULL!]                CVErr(xlErrNull)
xlErrNum                    [#NUM!]                 CVErr(xlErrNum)
xlErrRef                    [#REF!]                 CVErr(xlErrRef)
xlErrValue                  [#VALUE!]
CVErr(xlErrValue)
				
Работать с этими значениями ошибок встроенные листа так же, как работать с ошибками пользовательских--как нумерованные списки преобразуются в значения ошибки с помощью функции CVErr. Единственное различие состоит, в журнал ошибок, Visual Basic для приложений предоставляет номера ошибок как встроенные константы а также предоставляет значения литерала ошибки. Для этих элементов не предоставляются значения пользовательских ошибок. Значения литерала ошибки должны быть заключены в квадратные квадратные скобки, как показано в приведенной выше таблице.

Пример с использованием встроенных ошибок Значения:
   Function Commission(SharesSold,PricePerShare)
      If Not (IsNumeric(SharesSold) And IsNumeric(PricePerShare)) Then
         Commission = CVErr(xlErrNum)
      Else
         TotalSalePrice = ShareSold * PricePerShare
         If TotalSalePrice <= 15000 Then
            Commission = 25 + 0.03 * SharesSold
         Else
            Commission = 25 + 0.03 * (0.9 * SharesSold)
         End If
      End If
   End Function
				

Централизация код обработки ошибок

При добавлении кода обработки ошибок в Visual Basic для Макросы приложений, вы обнаружите обрабатывается тем же ошибкам снова и снова. Можно уменьшить объем кода и усилий необходимо написать код, написав несколько процедур обработки ошибок код можно вызвать для обработки типичных ситуациях ошибки.

Ниже соответствующий пример процедуры function, которая отображает сообщение для Ошибка произошла, и там, где это возможно, она позволяет пользователю указать какие действия предпринять путем выбора определенной кнопки. Он возвращает номер кода процедура, которая вызвана процедура.
   Public Const RESUME_STATEMENT = 0   'Resume
   Public Const RESUME_NEXT = 1        'Resume Next
   Public Const UNRECOVERABLE = 2      'Unrecoverable error
   Public Const UNRECOGNIZED = 3       'Unrecognized error
   Public Const ERR_DEVICEUNAVAILABLE = 68
   Public Const ERR_BADFILENAMEORNUMBER = 52
   Public Const ERR_PATHDOESNOTEXIST = 76
   Public Const ERR_BADFILEMODE = 54


  Function FileErrors(errVal As Integer) As Integer
   Dim MsgType As Integer, Msg As String, Response As Integer
      MsgType = vbExalamation
      Select Case errVal
         Case ERR_DEVICEUNAVAILABLE     'Error #68
            Msg = "That device is unavailable."
            MsgType = MsgType + vbAbortRetryIgnore
         Case BADFILENAMEORNUMBER      'Errors #64 & 52
            Msg = "That filename is not valid."
            MsgType = MsgType + vbOKCancel
         Case PATHDOESNOTEXIST      'Error #76
            Msg = "That path does not exist."
            MsgType = MsgType + vbOKCancel
         Case BADFILEMODE      'Error #54
            Msg = "Can not open the file for that type of access."
            MsgType = MsgType + vbOKCancel
         Case Else
            FileErrors = UNRECOGNIZED
            Exit Function
      End Select
      Response = MsgBox(Msg, MsgType, "Disk Error")
      Select Case Response
         Case vbOK, vbRetry
            FileErrors = RESUME_STATEMENT
         Case vbIgnore
            FileErrors = RESUME_NEXT
         Case vbCancel, vbAbort
            FileErrors = UNRECOVERABLE
         Case Else
            FileErrors = UNRECOGNIZED
      End Select
   End Function
				

Обработка пользователя прерываний

Пользователь может прервать Visual Basic для приложений нажав клавиши CTRL + BREAK или ESC (COMMAND + ПЕРИОД для Macintosh). Имеется возможность Отключите прерывания для процедуры завершения работы приложения. Тем не менее если не отключайте прерывания пользователя по завершении процедуры, можно сделать Убедитесь, что уведомления, процедуры, когда произошло прерывание, так что он Закройте файлы, отключитесь от общих ресурсов или восстановить изменения переменные перед возвратом управления приложения для пользователя.

Можно выполнить треппинг прерывания пользователя в процедурах, установив EnableCancelKey Свойство xlErrorHandler. Если значение этого свойства будет все прерывания создать выполнения номер ошибки 18, которое можно перехватить ошибку на оператор. Можно обработать ошибку остановку процедуры и выхода из программы. Если оператор Resume используется для продолжения процедуры после треппинга Ошибка во время выполнения, прерывание игнорируется.

Также имеется возможность полностью игнорировать прерывания пользователя, задав свойство EnableCancelKey xlDisabled. В этом состоянии Microsoft Excel игнорирует все попытки пользователя прерывание выполнения процедуры. Чтобы восстановить обработки прерываний по умолчанию Измените значение свойства EnableCancelKey на xlInterrupt. Во избежание Постоянное отключение прерывания пользователя, Microsoft Excel всегда процедуры Восстанавливает значение по умолчанию свойства EnableCancelKey xlInterrupt Каждый раз, когда процедура завершения его выполнения. Чтобы гарантировать, что прерывания правильно обрабатываются в коде, необходимо отключить или треппинга прерывает работу каждый раз при выполнении процедуры. Следует иметь в виду, что только можно использовать один обработчик прерываний для каждой процедуры и что же обработчик используется для всех ошибок во время выполнения, столкнулся с этой процедурой.

В в этом примере демонстрируется процедура, требующая большой промежуток времени для завершения. Если пользователь прерывает работу процедуры, производится перехват ошибки. Пользователь прерывание сначала проверяет, что процедура фактически требуется остановка и затем Выход из процедуры упорядоченного способом.
   Sub ProcessData()
      'Set up a user interrupt trapping as a run-time error
      On Error GoTo UserInterrupt
      Application.EnableCancelKey = xlErrorHandler

      'Start a long duration task
      For x = 1 to 1000000
         For y = 1 to 10
         Next y
      Next x

      Exit Sub
   UserInterrupt:
      If Err = 18 Then
         If MsgBox ("Stop processing records?", vbYesNo) = vbNo Then
            'Continue running at the point procedure was interrupted
            Resume
         Else
            'Handle other errors that occur
            MsgBox Error(Err)
         End If
      End If
   End Sub
				
Если запустить макрос ProcessData и быстро нажмите клавиши CTRL + BREAK Появится окно сообщения с указанием о необходимости остановки обработки записей. Если вы Нажмите кнопку "Да", появляется другое окно сообщения с «произошло вмешательство пользователя». Если вы Нажмите кнопку OK в этом окне сообщения конца макроса. Если нажать кнопку Нет в первом окно сообщения продолжает макроса.

Оператор Resume

Оператор Resume Возобновляет выполнение кода после возникновения ошибки процедуру обработки завершен.

Ссылки

Excel 97

Для получения дополнительных сведений о перехват ошибок макроса выберите индекс на вкладке Справка Microsoft Excel 97 Visual Basic, введите следующий текст
перехват ошибок
затем дважды щелкните выделенный текст, чтобы перейти к "Trappable Раздел «Ошибки».

Excel 7.0

Для получения дополнительных сведений о перехват ошибок макроса выберите индекс на вкладке Справка: Microsoft Excel версии 7.0, введите следующий текст
перехват ошибок
затем дважды щелкните выделенный текст, чтобы перейти к ошибке" раздел треппинга».

Microsoft Excel версии 5.0

В «Руководстве пользователя Visual Basic», версия 5.0, Глава 9, "Обработка Ошибки и значения ошибок"в следующих разделах:
  • "Предотвращение кода С остановка или выполняющий Непредсказуемо»
  • «Создание значения ошибок, которые не прерывать вашего Код"
  • "С помощью встроенных значений ошибок Microsoft Excel"
  • «Приемы дополнительные обработки ошибок»

Свойства

Код статьи: 146864 - Последний отзыв: 19 сентября 2011 г. - Revision: 5.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 5.0 Standard Edition
  • Microsoft Excel 5.0 for Macintosh
Ключевые слова: 
kbdtacode kbhowto kbprogramming kbmt KB146864 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:146864

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com