Errore di registrazione con Visual Basic, Applications Edition

Traduzione articoli Traduzione articoli
Identificativo articolo: 146864 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Quando in Microsoft Visual Basic Applications macro si verifica un errore di runtime, viene visualizzato un messaggio di errore sullo schermo, e la macro viene interrotta o si comporta in modo imprevedibile.

Per evitare che l'applicazione degli arresti anomali o funziona in modo imprevedibile, Ŕ possibile includere codice macro che intercetta l'errore e indica la macro come gestirlo. Il processo di intercettazione e la gestione di un errore di runtime Ŕ in Ŕ di denominato "intercettazione degli errori". Il set di istruzioni che indica l'applicazione come gestire l'errore Ŕ denominato "routine di gestione degli errori" o "Errore gestore".

Informazioni

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia espressa o implicita. Questo include, ma non Ŕ limitato a, le garanzie implicite di commerciabilitÓ o idoneitÓ per uno scopo specifico. Questo articolo si presuppone che conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug di procedure. Tecnici del supporto Microsoft possono spiegare la funzionalitÓ di una particolare procedura, ma in nessun sono caso a modificare questi esempi per fornire funzionalitÓ aggiuntive o creare procedure per soddisfare specifiche esigenze. Durante l'esecuzione di codice di Visual Basic, possono verificarsi diversi tipi di errori che possono essere intercettati. ╚ possibile sfruttare la registrazione degli errori in Microsoft Excel utilizzando le seguenti funzioni e istruzioni.

Istruzione On Error

L'istruzione On Error consente di Visual Basic, Applications Edition avviare o interrompere la registrazione degli errori. L'istruzione On Error specifica anche un insieme di istruzioni da eseguire se viene rilevato un errore.

Per ulteriori informazioni, vedere i seguenti articoli della Microsoft Knowledge Base riportato di seguito:
141571Utilizzo di "On Error" per errori di handle in una macro

Errore della funzione

La funzione ERR restituisce il numero dell'errore rilevato.

Esempio di utilizzo della funzione ERR:
   Msgbox "The most recent error number is " & Err & _
      ". Its message text is: " & Error(Err)
				
nella tabella seguente contiene un elenco di codici di errore intercettabile si verificano quando si utilizza la funzione 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)
				
per ulteriori informazioni, vedere il seguente articolo della Microsoft Knowledge Base riportato di seguito:
142138OFF: Una descrizione di errori intercettabile in Visual Basic per applicazioni

Funzione Error

La funzione di errore restituisce il messaggio di errore corrisponde a un numero di errore specificato.

Esempio di utilizzo della funzione di errore:
   Msgbox "The message text of the error is: " & Error(Err)
				

Istruzione di errore

L'istruzione Error Simula l'occorrenza di un errore, consentendo di assegnare la funzione ERR un numero di errore personalizzato. Questi valori di errore utente-definite sono valori che Ŕ possibile definire per le procedure e che vengono sempre archiviati nelle variabili del tipo di dati Variant. Un utilizzo comune di questo tipo di valore di errore si Ŕ nelle procedure che accettano pi¨ argomenti e restituiscono un valore. Si supponga ad esempio, che il valore restituito Ŕ valido solo se gli argomenti compresi in un determinato intervallo. La routine possibile verificare gli argomenti che fornisce all'utente, e se gli argomenti non compreso nell'intervallo accettabile, Ŕ possibile impostare la restituzione di routine, il valore di errore appropriato.

Errore Ŕ un sottotipo del tipo di dati Variant e quando viene utilizzato il termine "valore di errore", in genere significa che una variabile Ŕ di tipo Variant e che contenga un valore che Visual Basic, Applications Edition viene riconosciuta come un errore definito dall'utente. I valori di errore vengono utilizzati in una routine per indicare che sono state le condizioni di errore. A differenza dei normali errori di run-time, questi errori non interrompere il codice perchÚ sono riconosciuti come variabili standard e non gli errori. Le procedure possono verificare questi valori di errore e intraprendere le azioni correttive appropriate.

╚ inoltre possibile utilizzare l'istruzione Error per simulare errori in fase di esecuzione. Questo Ŕ particolarmente utile quando si siano verificando le applicazioni o quando si desidera gestire una condizione specifica come equivalente a un errore di run-time. Le applicazioni runtime di Visual Basic Ŕ possibile simulare fornendo il codice di errore per l'errore in un'istruzione di errore. ╚ possibile utilizzare l'istruzione Error per creare i propri errori di definito dall'utente fornendo un codice di errore non corrisponde a un errore di run-time applicazioni di Visual Basic. La tabella contenente un elenco di errori predefiniti verrÓ visualizzata in questo articolo (nella sezione "Funzione di errore"). In questa fase, Visual Basic, Applications Edition non utilizza tutti i numeri disponibili per gli errori incorporati. Nelle future versioni di Visual Basic, Applications Edition, i numeri di interni aumenterÓ come pi¨ create - in errori vengono aggiunti. Si consiglia di avviare i numeri di errore a 50.000 e il funzionamento fino a 65.535 per evitare possibili conflitti in futuro.

Istruzione using errore esempio per simulate degli errori di runtime:
   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
				
quando test la macro viene eseguita, viene visualizzato una finestra di messaggio contenente "personale errore" del messaggio.

Funzione CVErr

La funzione CVErr consente di creare i valori di errore. La funzione CVErr funzione accetta un argomento che deve essere un numero intero o essere una variabile che contiene un valore integer.
   NoRadius = CVErr(2010)

   NotANumber = 2020
   InvalidArgument = CVErr(NotANumber)
				
esempio utilizzando la funzione 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
				

Utilizzo di valori predefiniti di errore

Esistono sette valori di errore incorporati in Microsoft Excel. Nella tabella riportata di seguito viene illustrato il numero di errore (costante), il valore di errore letterale e il valore di errore convertito.
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)
				
si utilizzano questi valori di errore di foglio di lavoro incorporata la stessa modalitÓ di utilizzo gli errori definiti dall'utente, come numeri convertito in valori di errore utilizzando la funzione CVErr. L'unica differenza Ŕ che gli errori del foglio di lavoro, il comando Visual Basic, Applications Edition fornisce i numeri di errore come costanti incorporate e fornisce inoltre i valori di errore letterale. Questi elementi non sono disponibili per i valori di errore definito dall'utente. Come illustrato nella tabella sopra riportata Ŕ necessario racchiudere i valori di errore letterale racchiuso tra parentesi quadre.

Valori di esempio con l'errore incorporati:
   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
				

Centralizzazione della gestione del codice di errore

Quando si aggiunge codice di gestione degli errori di macro di applicazioni di Visual Basic, si scoprirÓ che gli stessi errori vengano da gestiti in modo continuativo. ╚ possibile ridurre la dimensione del codice e lo sforzo richiesto per scrivere codice scrivendo alcune procedure che il codice di gestione degli errori pu˛ chiamare per gestire le situazioni di errore comuni.

Di seguito Ŕ riportato un esempio di una routine di funzione che visualizza un messaggio corrispondente dell'errore che si Ŕ verificato e, laddove possibile, consente all'utente di specificare quale azione eseguire successivo scegliendo un pulsante specifico. Quindi restituisce il numero di codice alla routine che lo ha chiamato.
   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
				

Gestione utente interrupt

Un utente pu˛ interrompere una routine di applicazioni di Visual Basic premendo CTRL+INTERR o ESC (comando+punto in Macintosh). ╚ possibile disabilitare gli interrupt per le procedure nelle applicazioni completate. Tuttavia, se non si disattiva gli interrupt di utente nella procedura completata, Ŕ possibile assicurarsi che la routine Ŕ una notifica quando si Ŕ verificato un interrupt in modo che pu˛ chiudere i file, disconnettersi da risorse condivise o ripristinare modificate le variabili prima di restituire il controllo dell'applicazione per l'utente.

╚ possibile intercettare gli interrupt dell'utente durante le procedure di impostando il EnableCancelKey proprietÓ xlErrorHandler. Quando questa proprietÓ Ŕ impostata, tutti gli interrupt genererÓ una fase di esecuzione numero di errore 18, che pu˛ essere intercettato tramite On Error istruzione. ╚ possibile gestire l'errore per interrompere la procedura e uscire dal programma. Se l'istruzione Resume viene utilizzata per continuare la procedura dopo un errore registrato in fase di esecuzione, l'interrupt viene ignorato.

╚ inoltre possibile ignorare gli interrupt utente completamente impostando la proprietÓ EnableCancelKey xlDisabled. In questo stato, vengono ignorate tutti i tentativi dell'utente di interrompere la routine in esecuzione. Per ripristinare l'interrupt predefinito di elaborazione, modificare l'impostazione della proprietÓ EnableCancelKey per xlInterrupt. Per impedire la disattivazione in modo permanente gli interrupt dell'utente di una routine, verrÓ sempre Ripristina l'impostazione predefinita la proprietÓ EnableCancelKey xlInterrupt ogni volta che la procedura completa l'esecuzione. Per garantire che gli interrupt vengono gestiti correttamente all'interno del codice, Ŕ necessario disattivare in modo esplicito o intercettare gli interrupt ogni volta che viene eseguita la routine. ╚ opportuno sottolineare tale gestore di interrupt solo una pu˛ essere utilizzato per ciascuna routine, e lo stesso gestore utilizzato per tutti i errori di runtime rilevati da tale routine.

Nell'esempio seguente di seguito viene illustrato una routine che richiede un grande periodo di tempo per il completamento. Se un utente viene interrotta la procedura, viene intercettato un errore. L'interrupt utente conferma prima che la routine effettivamente deve essere interrotto e quindi si chiude la procedura in modo ordinato.
   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 si esegue la macro ProcessData e si premere rapidamente CTRL+INTERR, verrÓ visualizzata una finestra di messaggio che richiede se si desidera interrompere l'elaborazione record. Se si sceglie Sý, verrÓ visualizzata un'altra finestra di messaggio con "si Ŕ verificato interrupt utente". Se si sceglie OK nella finestra di messaggio, la macro termina. Se si sceglie No nella prima finestra di messaggio, la macro continua.

Istruzione Resume

L'istruzione Resume riprende l'esecuzione di codice in modalitÓ termine di un errore di routine di gestione degli.

Riferimenti

Excel 97

Per ulteriori informazioni sugli errori di registrazione macro, fare clic sull'indice di tabulazione in Microsoft Excel 97 Guida di Visual Basic, digitare il testo riportato di seguito
intercettazione degli errori
e fare doppio clic sul testo selezionato per passare all'argomento "Errore intercettabile".

Excel 7.0

Per ulteriori informazioni sull'intercettazione degli errori di macro, fare clic sull'indice di tabulazione in Microsoft Excel 7.0 Guida, digitare il testo riportato di seguito
intercettazione degli errori
e fare doppio clic sul testo selezionato per passare all'argomento "Errore registrazione".

Excel 5.0

Nella "Guida dell'utente di Visual Basic," versione 5.0, capitolo 9, "Gestione degli errori ed errore valori," vedere i seguenti argomenti:
  • "Impedisce del codice da arresto o agisce imprevedibile"
  • "Creazione di valori di errore che non interrupt del codice"
  • "Utilizzo dei valori di errore predefinito di Microsoft Excel"
  • "Gestione degli errori avanzate Techniques"

ProprietÓ

Identificativo articolo: 146864 - Ultima modifica: venerdý 19 gennaio 2007 - Revisione: 3.4
Le informazioni in questo articolo si applicano a:
  • Microsoft Office Excel 2003
  • 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 per Macintosh
  • Microsoft Excel 5.0a per Macintosh
Chiavi:á
kbmt kbdtacode kbfaq kbhowto kbprogramming KB146864 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 146864
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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