Chyba odchytu v jazyku Visual Basic for Applications

Preklady článku Preklady článku
ID článku: 146864 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Keď nastane chyba spustenia v Microsoft Visual Basic pre aplikácie makro, zobrazí sa chybové hlásenie na obrazovke a makro buď zastaví alebo chová nepredvídateľne.

Aby sa zabránilo uplatňovanie od shazovat alebo správať nepredvídateľne, môže obsahovať kód makra, zachytáva sa vyskytla chyba a povie makro, ako to zvládnu. Proces intercepting a manipuláciu chyba spustenia sa nazýva "chyba odchytu." Súbor pokynov, hovorí žiadosť ako zvládnuť, že sa nazýva chyba "chýb bežné" alebo "obslužný program chýb."

DALSIE INFORMACIE

Spoločnosť Microsoft poskytuje príklady programovacieho kódu len ako názornú ukážku bez ľubovoľnej vyjadrenej alebo implicitnej záruky. Toto zahŕňa, okrem iného, implicitné záruky obchodovateľnosti a vhodnosti pre konkrétny účel. Úroveň odbornosti článku predpokladá, že ovládate predvádzaný programovací jazyk a nástroje, ktoré sa používajú na vytváranie a ladenie procedúr. Pracovníci technickej podpory spoločnosti Microsoft môžu pomôcť vysvetliť funkčnosť konkrétny postup, ale nie modifikuje tieto príklady poskytovať pridanú funkčnosť alebo výstavbe postupy splniť vaše konkrétne požiadavky. Je spustený kód jazyka Visual Basic môžete stretnúť niekoľko typov chýb, ktoré mô u byť zachytené. Môžete využiť Chyba odchytu v programe Microsoft Excel pomocou nasledovných funkcií a vyhlásenia.

Na vyhlásenia, chyba

Vyhlásenie o chybu spôsobuje jazyka Visual Basic pre aplikácie spustiť alebo zastaviť chyba odchytu. Vyhlásenie o chybe tiež určuje súbor vyhlásenia vykonať, ak sa vyskytla chyba.

Pre ďalšie informácie, prosím nájdete v nasledujúcich článkoch databázy Microsoft Knowledge Base:
141571Ako používať "Na Error" popisovač chyby v makre

Err funkcia

Err funkcia vráti počet sa vyskytla chyba.

Príklad použitia Err funkcie:
   Msgbox "The most recent error number is " & Err & _
      ". Its message text is: " & Error(Err)
				
Nasledujúca tabuľka obsahuje zoznam zachytiteľná chybové kódy môžete môžu vyskytnúť, keď použijete funkciu 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)
				
Ďalšie informácie, prečítajte si nasledujúci článok v Microsoft Knowledge Base:
142138VYP: Vysvetlenie zachytiteľná chýb v jazyku Visual Basic pre aplikácie

Chyba funkcie

Chyba funkcia vráti chybové hlásenie, ktoré zodpovedá číslo danej chyby.

Príklad použitia chybovú funkciu:
   Msgbox "The message text of the error is: " & Error(Err)
				

Chyba vyhlásenie

Chyba vyhlásenie simuluje výskytu chyby zo umožní vám priradiť vlastné chybové číslo Err funkciu. Tieto užívateľa- definované chybové hodnoty sú hodnoty, ktoré definujete pre svoje postupy a že sú vždy uložené v premenných Variant údajový typ variant. Bežné používanie tohto typ chybovú hodnotu je v postupoch, ktoré akceptovať niekoľko argumenty a vráti hodnota. Predpokladajme napríklad, že vrátená hodnota je platná iba vtedy, ak argumenty spadajú do určitého rozsahu. Váš postup môžete otestovať argumenty, poskytuje užívateľ a ak argumenty nie sú v rozsahu prijateľné, môžete mať postupom vrátiť vhodné chybovú hodnotu.

Chyba je podtyp Variant údajový typ a keď sa výraz "chybovú hodnotu" používa, je zvyčajne to znamená, že premenná je typu Variant, a že obsahuje hodnoty, ktoré Visual Basic for Applications rozpoznáva ako používateľom definovanú chybu. Chybové hodnoty sú použité v postupe naznačuje, že chyba podmienky vyskytla. Na rozdiel od bežných run-time chyby, tieto chyby neprerušia vaše kód, pretože sú uznané ako bežné premenných a nie chyby. Vaše postupy môžu test pre tieto chybové hodnoty a prijať vhodné nápravné akcie.

Môžete použiť aj vyhlásenie chyba na simuláciu run-time chyby. To je obzvlášť užitočné pri testovaní aplikácie, alebo Ak chcete na liečbu konkrétneho stavu za rovnocenné spustiť- čas sa vyskytla chyba. Akékoľvek Visual Basic for Applications môže byť simuluje chyba spustenia poskytovaním chybový kód chyby v výpis chyba. Môžete tiež použite príkaz chyba vytvoriť vlastné užívateľské chyby poskytovaním chybový kód, ktorý nezodpovedá Visual Basic for Applications spustenia chyba. Tabuľka obsahuje zoznam vstavaných chýb sa zobrazí skôr v tomto článok (podľa oddielu "Err funkcia"). V tejto dobe, Visual Basic for Aplikácie, všetky dostupné čísla nepoužíva vstavané chýb. V budúce uvoľnenia Visual Basic for Applications, vnútorné čísla budú zvýši viac postavený - v chyby sa pridávajú. Odporúča sa, že začnete vaša chyba čísel na 50.000 a práce vášho spôsobom až 65 535 znakov, aby sa zabránilo možné konflikty v budúcnosti.

Príklad výkazu chyba simulovať Run-time chyby:
   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
				
Keď je spustené makro Test, dostanete okno hlásenia, ktoré obsahuje moje vlastné vyskytla sa chyba"ako správy.

Funkcia CVErr

Funkcia CVErr sa používa na vytvorenie chybové hodnoty. CVErr funkcia má argument, že musí byť celé číslo alebo byť premenná, obsahuje celé číslo.
   NoRadius = CVErr(2010)

   NotANumber = 2020
   InvalidArgument = CVErr(NotANumber)
				
Príklad použitia funkcia 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
				

Pomocou vstavaného chybové hodnoty

Existuje sedem vstavané chybových hodnôt programu Microsoft Excel. V nižšie uvedená tabuľka znázorňuje číslo chyby (konštanta), doslovný chybovú hodnotu, a konvertovaný chybovú hodnotu.
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)
				
Pracujete s tieto vstavané hárka chybové hodnoty rovnakým spôsobom pracujete s chýb definovaných--ako čísla konvertuje na chybové hodnoty pomocou funkcie CVErr. Jediným rozdielom je, že pracovný hárok chýb, Visual Basic for Applications poskytuje chybových čísel ako vstavané konštanty a tiež poskytuje doslovný chybové hodnoty. Tieto položky nie sú stanovené používateľom definované chybové hodnoty. Doslovný chybové hodnoty musia byť uzavreté v hranatých zátvorky, ako je uvedené vyššie v tabuľke.

Napríklad pomocou vstavaného chyba Hodnoty:
   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
				

Centralizácia vydávania chýb kód

Keď pridáte chýb kód do vášho jazyka Visual Basic pre Aplikácie makrá, objavíte, že rovnaké chyby sú spracovávaného znovu a znovu. Môžete zmenšiť veľkosť váš kód a úsilie požadované písať kód do písaní niekoľko postupov, ktoré váš chýb kód môžete zavolať zvládnuť bežných situácií chyba.

Nasledujúce je príklad funkčnej procedúry, ktorá zobrazí hlásenie zodpovedá Chyba ktorému došlo, a ak je to možné, umožňuje používateľovi zadať Aké opatrenia treba podniknúť ďalšie výberom na určité tlačidlo. Potom vráti kódové číslo s postupom, ktorý nazval ho.
   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
				

Manipuláciu užívateľa prerušuje

Používateľ môže prerušiť Visual Basic for Applications postup stlačením CTRL + BREAK alebo ESC (príkaz + obdobie na počítači Macintosh). Je možné zakázanie prerušenia postupy v hotových aplikácie. Avšak, ak Nevypínať používateľa prerušenia v postupe hotové, môžete istí, že váš postup je oznámené prerušenie nastala, tak že môžete zatvoriť súbory, odpojiť zdieľané prostriedky alebo obnoviť upravené premenné pred návratom kontroly uplatňovania používateľovi.

Pasce používateľa prerušenia vašej postupov nastavením EnableCancelKey Vlastnosť xlErrorHandler. Ak je táto vlastnosť nastavená, budú všetky prerušenia generovať run-time číslo chyby 18, ktoré mô u byť zachytené pomocou chybu na vyhlásenie. Chyba na zastavenie konania a skončiť program dokáže spracovať. Ak vyhlásenie Resume používa na pokračovať v postupe po odchytených Chyba spustenia, prerušenie je ignorovaná.

Je tiež možné ignorovať používateľa prerušenia úplne nastavením vlastnosti EnableCancelKey na xlDisabled. V tomto štáte, program Microsoft Excel ignoruje všetky pokusy užívateľa prerušenie postupu beží. Ak chcete obnoviť predvolené prerušenie spracovanie, zmeňte nastavenie vlastnosť EnableCancelKey na xlInterrupt. Aby sa zabránilo postup od natrvalo vypnúť používateľské prerušenia, program Microsoft Excel vždy Obnoví predvolené nastavenie vlastnosť EnableCancelKey xlInterrupt vždy, keď udalostnej procedúry jeho realizácie. Na zabezpečenie prerušenia spracovávaných správne v kóde, musíte explicitne vypnúť alebo depeše prerušuje zakaždým, keď postup je popravený. Treba poznamenať, že len jeden prerušenie handler možno použiť pre každého postupu, a že rovnaké handler sa používa pre všetky run-time rozpoznaných podľa uvedeného postupu.

V Následujúci príklad demonštruje postup, ktorý vyžaduje veľké časové obdobie na dokončenie. Ak používateľ preruší postupom, chyba je odchytené. Používateľ prerušenie najprv potvrdzuje, že postup by skutočne zastavené a potom ukončí postup riadnym spôsobom.
   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
				
Ak spustíte makro ProcessData a potom rýchlo stlačte klávesy CTRL + BREAK, sa zobrazí hlásenie, ktoré vás vyzve, či chcete zastaviť spracovanie záznamov. Ak ste kliknite na Áno, sa zobrazí iný hlásenie s "prerušenie používateľa sa vyskytla". Ak ste kliknite na tlačidlo OK v toto chybové hlásenie, makro končí. Ak kliknite na tlačidlo nie v prvom okno hlásenia, makro pokračuje.

Životopis vyhlásenie

Vyhlásenie Resume obnoví vykonávaní kód po chyba manipulačné rutinné dokončil.

ODKAZY

Excel 97

Ďalšie informácie o odchytu makro chyby, kliknite na položku Register kartu v jazyku Visual Basic Pomocník programu Microsoft Excel 97, zadajte nasledujúci text
odchytu chyby
a potom dvakrát kliknite na vybratý text, aby prejdite na "Trappable Chyby"tému.

Excel 7.0

Ďalšie informácie o odchytu makro chyby, kliknite na položku Register kartu v Pomocníkovi programu Microsoft Excel 7.0, zadajte nasledujúci text
Chyba odchytu
a potom dvakrát kliknite na vybratý text ísť na "chyba odchytu"tému.

Excel 5.0

"Visual Basic Používateľská príručka," verzia 5.0, kapitola 9, "manipulácia Chyby a chybové hodnoty,"nájdete v nasledovných témach:
  • "Zabrániť váš kód zastavenie alebo konať Nepredvídateľne"
  • "Vytváranie chybových hodnôt, ktoré nemajú prerušiť váš Kód"
  • "Pomocou vstavaného chybových hodnôt programu Microsoft Excel"
  • "Rozšírené chýb techniky"
Note This is a "FAST PUBLISH" article created directly from within the Microsoft support organization. The information contained herein is provided as-is in response to emerging issues. As a result of the speed in making it available, the materials may include typographical errors and may be revised at any time without notice. See Terms of Use for other considerations.

Vlastnosti

ID článku: 146864 - Posledná kontrola: 17. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • 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 for Macintosh
Kľúčové slová: 
kbdtacode kbhowto kbprogramming kbmt KB146864 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:146864

Odošlite odozvu

 

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