Fouten onderscheppen in Visual Basic for Applications in Excel voor Mac

BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.

De Engelstalige versie van dit artikel is de volgende:193247
Dit artikel is gearchiveerd. Het wordt aangeboden in de huidige vorm en wordt niet meer bijgewerkt.
Samenvatting
Wanneer een run time fout optreedt in een Microsoft Visual Basic for Applicationsmacro, verschijnt een foutbericht op het scherm en de macro stopt ofwelof gedraagt zich onvoorspelbaar gaat gedragen.

Om te voorkomen dat de toepassing vastloopt of onvoorspelbaar werkt, kunt umacrocode opnemen waarmee de fout wordt onderschept en wordt de macro het aangegeven opprogramma verwerkt. Het proces van onderscheppen en een run time fout afhandelinggenaamd "fouten onderscheppen." De reeks instructies waarin wordt gemeld de toepassing dathet afhandelen van de fout wordt genoemd de "fout afhandelings routine" of "fouthandler."
Meer informatie
Microsoft biedt program meer voorbeelden ter illustratie alleen, zonder expliciete of impliciete garantie. Dit omvat, maar is niet beperkt tot, de impliciete garanties van verkoopbaarheid of geschiktheid voor een bepaald doel. In dit artikel wordt ervan uitgegaan dat u bekend met de programmeer taal worden opgespoord en met de hulp programma's die worden gebruikt bent voor het maken en waarmee fouten in procedures. Ondersteuningstechnici van Microsoft kunnen helpen verklaren de functionaliteit van een bepaalde procedure, maar zij zal deze voorbeelden om extra functionaliteit of samens tellen van procedures om te voldoen aan uw specifieke vereisten niet wijzigen.Terwijl de Visual Basic-code wordt uitgevoerd, zijn er verschillende soortenfouten die kunnen worden onderschept. U kunt profiteren van de fouten onderscheppen inMicrosoft Excel voor Mac met behulp van de volgende functies en -instructies.

On Error, instructie

HetBij foutinstructie wordt Visual Basic for Applications wilt starten of stoppen fouten onderscheppen. HetBij foutinstructie geeft ook een set instructies uit te voeren als er een fout is aangetroffen.

Fout functie

HetFoutfunctie retourneert het nummer van de fout is opgetreden.

In het volgende voorbeeld gebruikt deFoutFunctie:
   Msgbox "The most recent error number is " & Err & _      ". Its message text is: " & Error(Err)				
De volgende tabel bevat een overzicht van de af te vangen foutcodes u kuntoptreden wanneer u deFoutfunctie.
   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				

Fout functie

HetFoutFunctie retourneert het foutbericht dat overeenkomt met een opgegeven fout nummer.

In het volgende voorbeeld gebruikt deFoutFunctie:
   Msgbox "The message text of the error is: " & Error(Err)				

Error, instructie

HetFoutinstructie de vind plaats van een fout wordt gesimuleerd doordat u een aangepaste foutnummer toewijzen aan deFoutfunctie. Deze gebruiker-gedefinieerde foutwaarden zijn de waarden die u definieert voor de procedures en die altijd worden opgeslagen in variabelen van deVariantgegevenstype. Een gemeenschappelijk gebruik van dit type fout waarde is in procedures die verschillende argumenten accepteren en een waarde retourneren. Stel bijvoorbeeld dat de resultaat waarde is alleen geldig als de argumenten binnen een bepaald bereik vallen. De procedure de argumenten waarmee de gebruiker kunt testen en als de argumenten in het bereik niet, hebt u de procedure rendement de fout waarde.

Fouteen subtype van deVariantgegevenstype en wanneer de term "fout waarde" wordt gebruikt, betekent dit doorgaans dat een variabele van is deVarianttype, en bevat een waarde die Visual Basic for Applications wordt herkend als een door de gebruiker gedefinieerde fout. Foutwaarden worden in een procedure gebruikt om aan te geven dat de fouten zijn opgetreden. In tegenstelling tot normale runtime-fouten deze fouten niet worden onderbroken code omdat zeherkend als gewone variabelen en geen fouten. De procedures kunnen testenvoor deze fout waarden en de passende corrigerende maatregelen nemen.

U kunt ook deFoutinstructie run time fouten simuleert. Dit is vooral handig wanneer u test uw toepassingen of wanneer u een bepaalde voorwaarde behandelen als gelijkwaardig aan een run-timefout. Een Visual Basic for Applications run time fout kan worden gesimuleerd.door het opgeven van de foutcode voor de fout in eenFoutinstructie. U kunt ook deFoutoverzicht maken van uw eigen door de gebruiker gedefinieerde fouten door een foutcode die niet overeenkomen met een Visual Basic for Applications run time fout. De tabel met een lijst van ingebouwde fouten eerder in dit artikel (onder de "fout functie" wordt weer gegevensectie). Op dit moment maakt in Visual Basic for Applications geen gebruik allede nummers beschikbaar voor ingebouwde fouten. In toekomstige versies van VisualBasis toepassingen, interne nummers zal toenemen naarmate meer gebouwd-fouten worden toegevoegd. Het wordt aanbevolen dat u de foutnummers start50000 en werk uw manier om te voorkomen dat mogelijke conflicten in tot en met 65535de toekomst.

Voorbeeld van gebruikFoutInstructie voor het simuleren van Run time fouten:
   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				
Wanneer de macro controle wordt uitgevoerd, ontvangt u een berichtvenster met 'mijn eigen fout opgetreden' als het bericht.

Functie CVErr

HetCVErrfunctie wordt gebruikt om foutwaarden te maken. HetCVErrfunctie heeft een argument dat moet een geheel getal of een variabele een geheel getal zijn.
   NoRadius = CVErr(2010)   NotANumber = 2020   InvalidArgument = CVErr(NotANumber)				
In het volgende voorbeeld gebruikt deCVErrFunctie:
   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				

Met behulp van ingebouwde foutwaarden

Er zijn zeven ingebouwde foutwaarden in Excel voor Mac. De onderstaande tabelhet foutnummer (constante), de letterlijke fout waarde wordt weer gegeven en degeconverteerde fout waarde.
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)				
U werkt met deze ingebouwde werk blad foutwaarden dezelfde werk wijzemet de gebruiker gedefinieerde fouten - als getallen naar foutwaarden met geconverteerdde functie CVErr. Het enige verschil is dat het werk blad foutenVisual Basic for Applications biedt de foutnummers als ingebouwdeconstanten en biedt ook letterlijke foutwaarden. Deze items zijn nietbeschikbaar voor de gebruiker gedefinieerde foutwaarden. De letterlijke foutwaarden moeten wordentussen vierkante haken, zoals in de bovenstaande tabel.

Voorbeeld met behulp van ingebouwde foutwaarden:
   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				

Fout afhandelings Code centraliseren

Wanneer u fout afhandelings code toevoegt aan uw Visual Basic for Applicationsmacro's, zult u ontdekken dat dezelfde fouten via zijn wordt verwerkt enopnieuw. U kunt de grootte van de code en de inspanning beperkencode schrijven die een aantal procedures schrijven uw fout afhandelings codevoor het verwerken van de voorkomende fout situaties kunt aanroepen.

Het volgende is een voorbeeld van een function-procedure geeft eenbericht dat overeenkomt met de fout die is opgetreden, en waar mogelijk,kan de gebruiker opgeven welke actie moet worden ondernomen volgende kiest eenbepaalde knop. Vervolgens wordt het code nummer naar de procedure diewordt genoemd.
   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				

Interrupts afhandelen van gebruiker

Een gebruiker kan een Visual Basic for Applications-procedure door onderbrekenDruk op COMMAND + punt. Het is mogelijk voor interrupts uitschakelenprocedures in uw voltooide toepassingen. Echter, als u niet uit te schakelende gebruiker wordt onderbroken in de procedure is voltooid, kunt u ervoor dat uwprocedure wordt gewaarschuwd wanneer een interrupt opgetreden zodat u het kunt sluitenbestanden, gedeelde net werk bronnen verbreken of herstellen gewijzigd variabelenvoordat u controle van de toepassing die de gebruiker terugkeert.

U kunt gebruikers interrupts overlappen in de procedures door deEnableCancelKeyeigenschapxlErrorHandler. Wanneer deze eigenschap is ingesteld, alle interrupts genereert een runtime-foutnummer 18, die kan worden overgevuld met behulp van eenBij foutinstructie. U kunt de fout om tot beëindiging van de procedure en sluit het programma af te verwerken. Als deCvinstructie wordt gebruikt om te gaan met de procedure na een run time fout gevangen, de interrupt wordt genegeerd.

Het is tevens mogelijk gebruikers interrupts volledig genegeerd door deEnableCancelKeyeigenschapxlDisabled. In deze toestand negeert Excel voor Mac alle pogingen door de gebruiker de actieve procedure worden onderbroken. Herstellen van de standaard interrupt verwerking, wijzig de instelling van deEnableCancelKeyeigenschapxlInterrupt. Om te voorkomen dat een procedure permanent uitschakelen gebruiker interrupts herstelt Excel voor Mac altijd de standaard instelling van deEnableCancelKeyeigenschapxlInterruptde procedure voltooid wanneer de uitvoering ervan. Om interrupts correct zijn verwerkt in uw code, moet u expliciet uitschakelen of de interrupts trap telkens wanneer de procedure wordt uitgevoerd. Opgemerkt moet worden dat slechts één interrupt handler voor elke procedure kan worden gebruikt en die dezelfde handler wordt gebruikt voor alle run time fouten die zich bij die regeling.

Het volgende voorbeeld wordt een procedure beschreven waarmee een grote vereisttijd om te voltooien. Als een gebruiker wordt onderbroken door de procedure een foutwordt onderschept. De interrupt gebruiker eerst bevestigt dat de procedure moetdaadwerkelijk worden gestopt en vervolgens de procedure afgesloten op ordelijke wijze.
   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				
Als u de macro ProcessData en druk CTRL + BREAK, snel eenberichtvenster waarin u wordt gevraagd of verwerkings dossiers niet meer weer gegeven.Als u klikt opJa, een ander berichtvenster met 'gebruikers onderbroken'wordt weer gegeven. Als u klikt opOKin dit berichtvenster wordt de macro beëindigd. Als uKlik opNeein het eerste berichtvenster wordt de macro verder uitgevoerd.

De instructie Resume

HetCvinstructie hervat na een fout afhandeling tot uitvoering van coderoutine is voltooid.
EXCEL 98 XL2001 XL2004 XLX

Waarschuwing: dit artikel is automatisch vertaald

Eigenschappen

Artikel-id: 193247 - Laatst bijgewerkt: 12/05/2015 09:21:16 - Revisie: 4.0

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

  • kbnosurvey kbarchive kbdtacode kbhowto kbmt KB193247 KbMtnl
Feedback