Fout onderscheppen met Visual Basic for Applications

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 146864 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

Als een run time fout optreedt in een Microsoft Visual Basic for Applications-macro verschijnt een foutbericht op het scherm en de macro stopt of gedraagt zich onvoorspelbaar gaat gedragen.

Om te voorkomen dat de toepassing vast lopen of zich onvoorspelbaar gaat gedragen, kunt u opnemen van de macrocode die de fout wordt onderschept en leest de macro omgaan met deze. Het proces van intercepting en een run time fout afhandeling heet "fouten onderscheppen." De set instructies waarin wordt gemeld dat de toepassing het afhandelen van wordt de fout genoemd "fout afhandelings routine" of "fout afhandelings routine."

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, kunnen er verschillende typen fouten die kunnen worden onderschept. U kunt profiteren van fouten onderscheppen in Microsoft Excel met behulp van de volgende functies en instructies.

On Error, instructie

De instructie On Error oorzaken van Visual Basic-toepassingen Start- of stop fouten onderscheppen. De instructie On Error geeft ook een aantal instructies voor het uitvoeren als er een fout is aangetroffen.

Voor extra informatie, Raadpleeg de volgende artikelen in de Microsoft Knowledge Base:
141571Hoe u met "Bij fout" fout afhandeling in een Macro

Fout functie

De functie fout retourneert het nummer van de fout is opgetreden.

Voorbeeld met de functie fout:
   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 fout codes die u kunnen optreden wanneer u de functie fout.
   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)
				
Zie het volgende artikel voor meer informatie de Microsoft Knowledge Base:
142138Office: Een verklaring van de onderschepbare fouten in Visual Basic voor toepassingen

Fout functie

De fout functie retourneert het foutbericht dat overeenkomt met een opgegeven foutnummer.

Voorbeeld met de functie fout:
   Msgbox "The message text of the error is: " & Error(Err)
				

Error, instructie

Simuleert het optreden van een fout door de instructie fout zodat u kunt een aangepaste foutnummer toewijzen aan de functie fout. Gebruikers- gedefinieerde foutwaarden zijn de waarden die u voor de procedures en die definieert worden altijd opgeslagen in variabelen van het gegevenstype Variant. Een gemeenschappelijk gebruik van deze type fout waarde is in procedures die verschillende argumenten accepteren en retourneren een waarde. Stel bijvoorbeeld dat de retour waarde is geldig als de argumenten binnen een bepaald bereik vallen. De procedure kan testen de argumenten die de gebruiker en als de argumenten niet in het toegestane bereik, kunt u de procedure die de fout waarde hebben.

Fout is een subtype van het gegevenstype Variant en de term "fout waarde" wordt gebruikt, wordt betekent meestal dat een variabele van het type Variant is en het bevat een de waarde die door 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 fout voorwaarden hebben Er is opgetreden. In tegenstelling tot normale runtime-fouten deze fouten niet worden onderbroken door de code omdat ze worden herkend als gewone variabelen en geen fouten. Uw procedures kunnen testen voor deze foutwaarden en nemen de juiste correctie acties.

U kunt ook de instructie fout run time simuleren fouten. Dit is vooral handig wanneer u uw toepassingen test of Als u wilt een bepaalde voorwaarde behandelen als gelijkwaardig aan een run- fout. Een Visual Basic for Applications run time fout kan worden gesimuleerd. door het leveren van de foutcode voor de fout in een instructie fout. U kunt ook Gebruik de instructie fout uw eigen door de gebruiker gedefinieerde fouten te maken door een foutcode die niet overeenkomen met een Visual Basic for Applications-runtime fout. De tabel met een lijst van ingebouwde fouten wordt weer gegeven in dit eerder artikel (onder de sectie "Fout functie"). Op dit moment voor Visual Basic Toepassingen niet met de beschikbare nummers voor ingebouwde fouten. In toekomstige versies van Visual Basic for Applications, de interne nummers wordt toenemen naarmate meer gebouwd - fouten worden toegevoegd. Het wordt aanbevolen dat u start de foutnummers 50000 en werk uw manier om te voorkomen dat mogelijk tot en met 65535 conflicten in de toekomst.

In het volgende voorbeeld simuleren met Error, instructie 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

De functie CVErr wordt gebruikt om foutwaarden te maken. De CVErr functie heeft een argument dat moet zijn een geheel getal of een variabele die een geheel getal bevat.
   NoRadius = CVErr(2010)

   NotANumber = 2020
   InvalidArgument = CVErr(NotANumber)
				
Voorbeeld van de functie CVErr gebruiken:
   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 Microsoft Excel. Het in de onderstaande tabel ziet u het foutnummer (constante), de letterlijke fout waarde en de geconverteerde fout waarde.
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)
				
U werken dezelfde manier met deze ingebouwde werk blad foutwaarden u werkt met de door de gebruiker gedefinieerde fouten - zoals nummers worden geconverteerd naar foutwaarden met behulp van de functie CVErr. Het enige verschil is dat het werk blad fouten Visual Basic for Applications biedt de foutnummers als ingebouwde constanten en biedt ook letterlijke foutwaarden. Deze items zijn niet beschikbaar voor aangepaste foutwaarden. De letterlijke foutwaarden moeten tussen vierkante haken, zoals in de bovenstaande tabel.

Voorbeeld met de ingebouwde fout Waarden:
   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 VBA- Macro's, toepassingen, zult u ontdekken dat dezelfde fouten zijn wordt verwerkt steeds opnieuw. U kunt de grootte van de code en de inspanningen verminderen nodig om code te schrijven door een paar procedures schrijven die de fout afhandeling code kan voor het verwerken van de voorkomende fout situaties oproepen.

De volgende een voorbeeld van een function-procedure een bericht geeft overeenkomt met de fout die is opgetreden en indien mogelijk, kan de gebruiker opgeven welke actie door het kiezen van een bepaalde knop volgende nodig. Vervolgens keert de code nummer van de procedure die wordt aangeroepen.
   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 onderbreken Druk op CTRL + BREAK of ESC (COMMAND + punt op de Macintosh). Het is mogelijk te interrupts procedures in uw voltooide toepassingen uitschakelen. Echter, als de gebruiker interrupts in de voltooide procedure niet is uitgeschakeld, kunt u ervoor zorgen dat de procedure wanneer er een interrupt heeft plaatsgevonden, wordt gemeld dat het kan bestanden sluiten, gedeelde net werk bronnen verbreken of herstellen gewijzigd variabelen voordat de configuratie van de toepassing die de gebruiker te retourneren.

U kunt gebruikers interrupts overlappen in de procedures door de EnableCancelKey de eigenschap xlErrorHandler. Wanneer deze eigenschap is ingesteld, worden alle interrupts genereren een run time foutnummer 18, die kan worden overgevuld met behulp van een fout op instructie. U kunt de fout om tot beëindiging van de procedure en sluit het programma af te verwerken. Als de instructie Resume wordt gebruikt om de procedure voortzetten na een gevangen run time fout, de interrupt wordt genegeerd.

Het is ook mogelijk om gebruiker interrupts volledig genegeerd door de eigenschap EnableCancelKey xlDisabled. In deze toestand negeert Microsoft Excel alle pogingen van de gebruiker de procedure is uitgevoerd worden onderbroken. De interrupt verwerking standaard herstellen Wijzig de instelling van de eigenschap EnableCancelKey xlInterrupt. Om te voorkomen dat een procedure permanent uitschakelen gebruiker interrupts, altijd Microsoft Excel Hiermee herstelt u de standaard instelling van de eigenschap EnableCancelKey xlInterrupt de procedure voltooid wanneer de uitvoering ervan. Om ervoor te zorgen dat interrupts correct afgehandeld binnen uw code, moet u expliciet uitschakelen of onderscheppen de Hiermee onderbreekt u telkens wanneer de procedure wordt uitgevoerd. Opgemerkt moet worden dat alleen een interrupt handler kan worden gebruikt voor elke procedure 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 tijd vereist om te voltooien. Als de procedure wordt onderbroken door een gebruiker, wordt een fout onderschept. De gebruiker Interrupt eerst bevestigt dat de procedure daadwerkelijk worden gestopt en vervolgens Sluit de procedure 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 een berichtvenster waarin u wordt gevraagd of verwerkings dossiers niet meer weer gegeven. Als u Klik op Ja, een ander berichtvenster met 'gebruikers onderbroken' wordt weer gegeven. Als u Klik op OK in dit berichtvenster, wordt de macro beëindigd. Als u op Nee in de eerste berichtvenster, wordt de macro verder uitgevoerd.

De instructie Resume

De instructie Resume hervat na een fout tot uitvoering van code verwerkings routine is voltooid.

Referenties

Excel 97

Klik op de Index voor meer informatie over macro fouten onderscheppen Visual Basic Help voor Microsoft Excel 97 en typ de volgende tekst
fouten onderscheppen
Dubbel klik op de geselecteerde tekst naar het Trappable' Fouten"onderwerp.

Excel 7. 0

Klik op de Index voor meer informatie over macro fouten onderscheppen Help bij Microsoft Excel 7. 0 en typ de volgende tekst
fouten onderscheppen
Dubbel klik op de geselecteerde tekst naar de fout" overlapping"onderwerp.

Excel 5. 0

"Visual Basic User's Guide' in afhandelen versie 5. 0, hoofd stuk 9" Fouten en foutwaarden"Zie de volgende onderwerpen:
  • "Uw Code van stoppen of handelend voorkomen Onvoorspelbaar"
  • "Maken van foutwaarden die niet onderbreken uw Code"
  • 'Gebruik de ingebouwde foutwaarden van Microsoft Excel"
  • "Geavanceerde fout afhandeling technieken"

Eigenschappen

Artikel ID: 146864 - Laatste beoordeling: maandag 19 september 2011 - Wijziging: 4.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 5.0 voor Macintosh
Trefwoorden: 
kbdtacode kbhowto kbprogramming kbmt KB146864 KbMtnl
Automatisch vertaald artikel
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:146864

Geef ons feedback

 

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