Сообщение об ошибке с помощью Visual Basic для приложений в Microsoft Excel для Macintosh

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

В этой статье

Аннотация

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

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

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

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

Оператор On Error

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

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

В 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           This array is fixed or temporarily locked
   11           Division by zero
   13           Type mismatch
   14           Out of string space
   16           Expression too complex
   17           Can't perform requested operation
   18           User interrupt occurred
   20           Resume without error
   28           Out of stack space
   35           Sub, function, or property not defined
   47           Too many DLL application clients
   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 or With block variable not set
   92           For Loop not initialized
   93           Invalid pattern string
   94           Invalid use of Null
   298          System DLL could not be loaded
   320          Can't use character device names in specified file names
   321          Invalid file format
   322          Can't create necessary temporary file
   325          Invalid format in resource file
   327          Data value named was not found
   328          Illegal parameter; can't write arrays
   335          Could not access system registry
   336          ActiveX component not correctly registered
   337          ActiveX component not found
   338          ActiveX component did not correctly run
   360          Object already loaded
   361          Can't load or unload this object
   363          Specified ActiveX control not found
   364          Object was unloaded
   365          Unable to unload within this context
   368          The specified file is out of date. This program requires
                a newer version
   371          The specified object can't be used as an owner form for
                Show
   380          Invalid property value
   381          Invalid property-array index
   382          Property Set can't be executed at run time
   383          Property Set can't be used with a read-only property
   385          Need property-array index
   387          Property Set not permitted
   393          Property Get can't be executed at run time
   394          Property Get can't be executed on write-only property
   400          Form already displayed; can't show modally
   402          Code must close topmost modal form first
   419          Permission to use object denied
   422          Property not found
   423          Property or method not found
   424          Object required
   425          Invalid object use
   429          ActiveX component can't create object or return
                reference to this object
   430          Class doesn't support OLE Automation
   430          Class doesn't support Automation
   432          File name or class name not found during Automation
                operation
   438          Object doesn't support this property or method
   440          OLE Automation error
   440          Automation error
   442          Connection to type library or object library for remote
                process has been lost
   443          Automation object doesn't have a default value
   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 or invalid property assignment
   450          Wrong number of arguments or invalid property assignment
   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
   458          Variable uses a type not supported in Visual Basic
   459          This component doesn't support events
   460          Invalid Cipboard format
   461          Specified format doesn't match format of data
   480          Can't create AutoRedraw image
   481          Invalid picture
   482          Printer error
   483          Printer driver does not support specified property
   484          Problem getting printer information from the system.
                Make sure the printer is set up correctly
   485          Invalid picture type
   486          Can't print form image to this type of printer
   735          Can't save file to Temp directory
   744          Search text not found
   746          Replacements too long
   31001        Out of memory
   31004        No object
   31018        Class is not set
   31027        Unable to activate object
   31032        Unable to create embedded object
   31036        Error saving to file
   31037        Error loading from file
				

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

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

Пример использования Ошибка Функции:
   Msgbox "The message text of the error is: " & Error(Err)
				

Оператор Error

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

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

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

Пример использования Ошибка Инструкция для имитации ошибки времени выполнения:
   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
				
Запустить тестовый макрос, появляется окно сообщения, которое содержит «мои собственные ошибка» в виде сообщения.

Функция 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
				

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

Существует семь встроенных ошибочных значений в 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 для приложений нажав клавишу COMMAND + ПЕРИОД. Имеется возможность отключить прерывания для процедуры завершения работы приложения. Тем не менее если не отключать пользователь прерывает работу по завершении процедуры, можно гарантировать, что ваш процедура уведомления при возникновении прерывания, таким образом, чтобы его закрыть файлы, отключитесь от общих ресурсов или восстановления изменения переменных Перед возвратом управления приложения для пользователя.

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

Также существует возможность полностью игнорировать прерывания пользователя, установивEnableCancelKey Свойство xlDisabled. В этом состоянии Excel для Mac игнорирует все попытки пользователем прерывание выполнения процедуры. Для восстановления прерывание обработки по умолчанию, изменения настройки EnableCancelKey Свойство xlInterrupt. Чтобы предотвратить постоянное Отключение прерывания пользователя процедуры, Microsoft Excel для Mac всегда восстанавливает значение по умолчанию 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 Появится окно сообщения с указанием о необходимости остановки обработки записей. При нажатии кнопки Да, другое окно сообщения с «произошло вмешательство пользователя» появится. При нажатии кнопки ОК в это диалоговое окно макрос заканчивается. Если вы Нажмите кнопку Нет в первом окне сообщения продолжает макроса.

Оператор Resume

В Резюме Инструкция возобновляет выполнение кода после обработки ошибок процедура завершена.

Свойства

Код статьи: 193247 - Последний отзыв: 6 октября 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Excel 2004 for Mac
  • Microsoft Excel X for Mac
  • Microsoft Excel 2001 for Mac
  • Microsoft Excel 98 for Macintosh
Ключевые слова: 
kbdtacode kbhowto kbmt KB193247 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:193247

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

 

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