Interceptação de erro com o Visual Basic for Applications no Excel para Mac

Traduções deste artigo Traduções deste artigo
ID do artigo: 193247 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Quando um erro em tempo de execução ocorre em um Microsoft Visual Basic para aplicativos macro, uma mensagem de erro aparece na tela e a macro pára ou se comporta de forma imprevisível.

Para impedir que o aplicativo falhando ou se comportando de forma imprevisível, você pode incluir código de macro que intercepta o erro e informa a macro como manipulá-lo. O processo de interceptar e manipular um erro em tempo de execução é chamado de "interceptação de erro". O conjunto de instruções que informa o aplicativo como manipular o erro é chamado o "rotina de tratamento de erros" ou "identificador de erro".

Mais Informações

Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação para uma finalidade específica. Este artigo presume que você está familiarizados com a linguagem de programação que está sendo demonstrada e com as ferramentas que são usadas para criar e depurar procedimentos. Engenheiros de suporte podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades. Enquanto o código do Visual Basic estiver sendo executado, você pode encontrar vários tipos de erros que podem ser interceptados. Você pode tirar proveito de interceptação de erro no Microsoft Excel para Mac usando as seguintes funções e instruções.

Na política de erros

A declaração On Error faz com que Visual Basic for Applications iniciar ou Parar ajuste de registro de erro. A declaração On Error também especifica um conjunto de instruções para executar se um erro for encontrado.

Função de erro

A função Err retorna o número de erro encontrado.

Exemplo usando a função Err :
   Msgbox "The most recent error number is " & Err & _
      ". Its message text is: " & Error(Err)
				
a tabela a seguir contém uma lista dos códigos de erro interceptável você pode encontrar ao usar a função 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
				

Função de erro

A função erro retorna a mensagem de erro que corresponde a um número determinado erro.

Exemplo usando a função de erro :
   Msgbox "The message text of the error is: " & Error(Err)
				

Erro de declaração

A declaração Error simula a ocorrência de um erro, permitindo que você atribuir um número erro personalizado para a função Err . Esses valores de erro definido pelo usuário-são valores que você definir para seus procedimentos e que sempre são armazenados em variáveis do tipo de dados Variant . Um uso comum desse tipo de valor de erro é nos procedimentos que aceitam vários argumentos e retornam um valor. Por exemplo, suponha que o valor de retorno é válido somente se os argumentos estejam dentro de um determinado intervalo. O procedimento pode testar os argumentos que o usuário fornece e se os argumentos não estiverem no intervalo aceitável, você pode ter o retorno do procedimento o valor de erro apropriado.

erro é um subtipo de tipo de dados Variant e quando o termo "valor de erro" é usado, isso normalmente significa que é uma variável do tipo Variant e que ele contém um valor que o Visual Basic for Applications reconheça como um erro definido pelo usuário. Valores de erro são usados em um procedimento para indicar que as condições de erro tenham ocorrido. Ao contrário dos erros em tempo de execução normais, esses erros não interrompam o código porque eles são reconhecidos como variáveis comuns e não os erros. Os procedimentos podem testar esses valores de erro e tome as ações corretivas apropriadas.

Você também pode usar a instrução Error para simular erros em tempo de execução. Isso é especialmente útil quando você está testando seus aplicativos, ou quando você deseja tratar uma determinada condição como sendo equivalente a um erro em tempo de execução. Qualquer erro em tempo de execução aplicativos do Visual Basic pode ser simulado, fornecendo o código de erro para o erro em uma instrução de erro . Você também pode usar a instrução de erro para criar seus próprios erros definidos pelo usuário, fornecendo um código de erro que não corresponde a um Visual Basic para erro de tempo de execução de aplicativos. A tabela que contém uma lista de erros internas aparece anteriormente neste artigo (na seção "Função de erro"). Neste momento, o Visual Basic for Applications não usa todos os números disponíveis para erros internos. Em futuras versões do Visual Basic for Applications, números internos aumentará como mais interno - erros são adicionados. É recomendável que você inicia os números de erro em 50.000 e funciona de maneira até 65.535 para evitar possíveis conflitos no futuro.

Exemplo usando política de erros para erros em tempo de execução Simulate:
   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
				
macro quando o teste é executada, você receberá uma caixa de mensagem que contém "meu próprio erro" como a mensagem.

Função CVErr

A função CVErr é usada para criar valores de erro. A função CVErr ocupa um argumento que deve ser um número inteiro ou ser uma variável que contém um número inteiro.
   NoRadius = CVErr(2010)

   NotANumber = 2020
   InvalidArgument = CVErr(NotANumber)
				
exemplo usando a função 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
				

Usando valores de erro internas

Há sete valores de erro interno no Excel para Mac. A tabela abaixo mostra o número de erro (constante), o valor de erro literal e o valor de erro convertido.
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)
				
você trabalhar com esses valores de erro de planilha internas da mesma maneira que trabalha com erros definidos pelo usuário--como números convertida em valores de erro usando a função CVErr. A única diferença é que, para os erros de planilha, o Visual Basic for Applications fornece os números de erro como constantes internas e também fornece valores de erro literal. Esses itens não são fornecidos para valores de erro definido pelo usuário. Os valores de erro literal devem ser entre colchetes, como mostra a tabela acima.

Exemplo usando valores de erro internas:
   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
				

Centralizar o código de tratamento de erros

Quando você adiciona código de tratamento de erros do Visual Basic para aplicativos macros, você descobrirá que os erros mesmos estão sendo manipulados repetidas vezes. Você pode reduzir o tamanho do seu código e o esforço necessário para escrever código escrevendo alguns procedimentos que o seu código de tratamento de erros pode chamar para lidar com as situações de erro comuns.

O seguinte é um exemplo de um procedimento de função que exibe uma mensagem correspondente para o erro que ocorreu e sempre que possível, permite que o usuário especifique que ação tomar próxima escolhendo um determinado botão. Ele retorna o número código ao procedimento que chamou.
   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
				

Interrompe o tratamento de usuário

Um usuário pode interromper um procedimento do Visual Basic for Applications pressionando COMMAND + ponto. É possível desativar as interrupções para procedimentos em seus aplicativos concluídos. No entanto, se você não desativar as interrupções de usuário no procedimento concluído, você pode fazer-se de que o procedimento é notificado quando uma interrupção ocorreu para que possa fechar arquivos, desconectar-se de recursos compartilhados ou restaurar variáveis modificadas antes de retornar o controle do aplicativo para o usuário.

Você ajustar o pode registro interrupções do usuário nos seus procedimentos, definindo a propriedade EnableCancelKey para xlErrorHandler . Quando essa propriedade é definida, todas as interrupções irão gerar um tempo de execução número do erro 18, que pode ser interceptado usando uma instrução On Error . Você pode manipular o erro para interromper o procedimento e sair do programa. Se a instrução resume é usada para continuar o procedimento após um erro de tempo de execução trapped, a interrupção será ignorada.

Também é possível ignorar completamente interrupções de usuário definindo a propriedade EnableCancelKey para xlDisabled . Nesse estado, o Excel para Mac ignora todas as tentativas pelo usuário interromper o procedimento em execução. Para restaurar a interrupção de padrão de processamento, altere a configuração da propriedade EnableCancelKey para xlInterrupt . Para impedir que um procedimento desativar permanentemente interrupções do usuário, Excel para Mac sempre restaura a configuração padrão da propriedade EnableCancelKey xlInterrupt sempre que o procedimento for concluído sua execução. Para garantir que as interrupções são manipuladas corretamente dentro do seu código, você deve explicitamente desative ou interceptar as interrupções de cada vez que o procedimento é executado. Deve-se observar esse manipulador de interrupção somente um pode ser usado para cada procedimento e que o mesmo manipulador é usado para todos os erros de tempo de execução encontrados por esse procedimento.

O exemplo a seguir demonstra um procedimento que requer um grande período de tempo para ser concluída. Se um usuário interrompe o procedimento, um erro será interceptado. A interrupção de usuário primeiro confirma que o procedimento, na verdade, deve ser interrompido e, em seguida, sai o procedimento de maneira ordenada.
   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
				
se você executa a macro ProcessData e, em seguida, pressione CTRL+BREAK rapidamente, será exibida uma caixa de mensagem que lhe peça se deseja parar o processamento de registros. Se você clicar em Sim , outra caixa de mensagem com "usuário interrupção ocorreu" será exibida. Se você clicar em OK nesta caixa de mensagem, a macro termina. Se você clicar em não na primeira caixa de mensagem, a macro continua.

Declaração de currículo

A instrução resume continua a execução remota de código após um rotina de manipulação de erro.

Propriedades

ID do artigo: 193247 - Última revisão: terça-feira, 23 de janeiro de 2007 - Revisão: 5.4
A informação contida neste artigo aplica-se a:
  • Microsoft Excel 2004 for Mac
  • Microsoft Excel X para Macintosh
  • Microsoft Excel 2001 para Mac
  • Microsoft Excel 98 for Macintosh
Palavras-chave: 
kbmt kbdtacode kbhowto KB193247 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 193247

Submeter comentários

 

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