Intercettazione degli errori con Visual Basic, Applications Edition in Excel per Mac

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: 193247
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
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 per Mac 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.

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           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				

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 in variabili di 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.

Esempio utilizzo errore istruzione agli errori di runtime 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				
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 accetta un argomento che deve essere un valore integer 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 nel Excel per Mac. 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 valuexlErrDiv0                   [#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.

Esempio di utilizzo dei valori di errore predefiniti:
   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, premere Comando+punto (.). È 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 la proprietà di EnableCancelKey su xlErrorHandler . Quando questa proprietà è impostata, tutti gli interrupt genererà una fase di esecuzione numero di errore 18, che può essere intercettato mediante un'istruzione On Error . È 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, in Excel per Mac Ignora 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, in Excel per Mac 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 , 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.
XL98 XL2001 XL2004 XLX

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 193247 - Ultima revisione: 12/05/2015 09:21:14 - Revisione: 5.4

Microsoft Excel 2004 for Mac, Microsoft Excel X per Mac, Microsoft Excel 2001 per Mac, Microsoft Excel 98 per Macintosh

  • kbnosurvey kbarchive kbmt kbdtacode kbhowto KB193247 KbMtit
Feedback