Chyba soutisk s jazykem Visual Basic for Applications

Překlady článku Překlady článku
ID článku: 146864 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

V Microsoft Visual Basic pro aplikace makra dojde chybě běhu na obrazovce se zobrazí chybová zpráva a makro zastaví nebo chová nestandardně.

Chcete-li zabránit aplikaci z selhání nebo chová nestandardně, můžete zahrnout kód makra, který zachycuje došlo k chybě a popis způsobu zpracování makra. Proces zachycení a Chyba spuštění zpracování se nazývá "Chyba soutisku." Sada pokynů, které popisuje způsob zpracování došlo k chybě aplikace se nazývá, "rutiny ošetření chyb" nebo "obslužná rutina chyb."

Další informace

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci bez žádné záruky výslovně uvedené nebo mlčky. To zahrnuje, ale není omezen pouze na předpokládaných záruk vztahujících se k obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že jste je obeznámen s programovacím jazykem, který je předmětem ukázky a s nástroji, které slouží k vytvoření a ladění skriptu. Pracovníci technické podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu však nemohou tyto příklady přidány funkce nebo vytvářet postupy podle svých specifických požadavků. Je spuštěn kód jazyka Visual Basic, může dojít k několika typy chyb, které mohou být soutisk. Můžete využít přesahů chyby v aplikaci Microsoft Excel pomocí následujících funkcí a příkazů.

V prohlášení chyba

Příkazu On Error způsobí Visual Basic for Applications spuštění nebo zastavení chyba soutisku. Příkazu On Error také určuje sadu příkazů pro spuštění, pokud dojde k chybě.

Další informace naleznete v následujících článcích znalostní báze Microsoft Knowledge Base:
141571Použití "On Error" pro zpracování chyb v makra

Chyba funkce

Chyba funkce vrátí počet došlo k chybě.

Příklad použití funkce chybová:
   Msgbox "The most recent error number is " & Err & _
      ". Its message text is: " & Error(Err)
				
následující tabulka obsahuje seznam můžete setkat při použití funkce Err kódy zachytitelné chybě.
   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)
				
Další informace naleznete následujícím článku znalostní báze Microsoft Knowledge Base:
142138OFF: Vysvětlení Zachytitelné chyby v jazyce Visual Basic pro aplikace

Chyba funkce

Chyba funkce vrátí chybovou zprávu, která odpovídá číslo dané chyby.

Příklad použití funkce Chyba:
   Msgbox "The message text of the error is: " & Error(Err)
				

Chyba příkazu

Chyba příkazu simuluje výskyt chybu tím, že umožňuje přiřazení čísla vlastní chybovou zprávu Chyba funkce. Tyto chybové hodnoty definované uživatele-jsou hodnoty, které definujete pro své postupy a vždy uložené v proměnné datového typu Variant. Společné tento typ chybové hodnoty slouží v postupech, které přijímat několik argumenty a vrátit hodnotu. Předpokládejme například, že vrácená hodnota je platná pouze tehdy, pokud argumenty spadají do určité oblasti. Do procedury můžete otestovat argumenty, které poskytuje uživateli a argumenty nejsou-li ve přijatelný rozsah, může máte postup vrácení příslušnou chybovou hodnotu.

Chyba je podtypem typ dat variant a pojem "chybovou hodnotu" je-li použit, obvykle to znamená, že proměnná je typu varianty a zda obsahuje hodnotu, která Visual Basic for Applications rozpozná jako chybu definované uživatelem. Chybové hodnoty se používají v proceduře označíte, že došlo k chybě podmínky. Na rozdíl od běžné chyby chodu tyto chyby není přerušit kódu, protože jejich jsou rozpoznány jako běžné proměnné a nejsou chyby. Procedury programu lze testování těchto chybových hodnot a přijmout vhodná nápravná opatření.

Chyba příkazu můžete použít také k simulaci chyby chodu. To je užitečné při testování aplikace nebo při chcete považovat za rovnocenné chybu běhu určitá podmínka. Poskytováním kód chyby pro chybu v příkazu chyba může být simulované jakékoli jazyka chybě při běhu aplikace. Chyba příkazu můžete použít také k vytvoření vlastní chyby definované uživatelem zadáním kódu chyby, které neodpovídá Visual Basic for Applications chybu běhu. Tabulka obsahující seznam předdefinovaných chyby se zobrazí v tomto článku (v části "Chybová funkce"). V tomto okamžiku Visual Basic for Applications nepoužívá všechna dostupná čísla vestavěných chyb. V budoucích verzích jazyka Visual Basic for Applications interní čísla zvýší jako více integrované - v chyby, která znějí. Je vhodné, aby spustíte vaše chyba čísla na 50 000 a fungují vaše až 65 535 předcházení konfliktům možné v budoucnu.

Příklad použití prohlášení chyba chcete simulovat chyby 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
				
spuštění makra při the test, zobrazí okno se zprávou obsahující "došlo k vlastní chybě" jako zpráva.

Funkce CVErr

Funkce CVErr slouží k vytvoření chybové hodnoty. CVErr, funkce přijímá argument, který musí být buď celé nebo být proměnná, která obsahuje celé číslo.
   NoRadius = CVErr(2010)

   NotANumber = 2020
   InvalidArgument = CVErr(NotANumber)
				
Příklad použití funkce 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
				

Pomocí vestavěné chybové hodnoty

V aplikaci Microsoft Excel nejsou sedm vestavěné chybové hodnoty. Níže uvedené tabulky se zobrazí číslo chyby (konstanty), literálu chybovou hodnotu a převedené chybovou 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)
				
Práci s těchto vestavěných listu chybové hodnoty, lze pracovat s chyby definované uživatelem – jako čísla stejným způsobem jako převedeny na chybové hodnoty pomocí funkce CVErr. Jediným rozdílem je, že chyby listu, Visual Basic for Applications obsahuje čísla chyb jako předdefinované konstanty a také nabízí literálu chybové hodnoty. Tyto položky nejsou poskytovány pro uživatelem definované chybové hodnoty. Jak je uvedeno v tabulce, které jsou výše uvedené je nutné uzavřít literálu chybové hodnoty v hranatých závorkách.

Příklad použití vestavěné chybové 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
				

Při zpracování kódu centralizaci

Při přidáte zpracování chyb kódu jazyka Visual Basic pro makra aplikace, bude zjistíte, že stejné chyby jsou zpracovávaném opakovaně. Můžete snížit velikost kódu a úsilí nutné napsat kód napsáním několika postupy, které váš kód zpracování chyb může volat ke zpracování běžných situací chyba.

Následuje příklad procedury funkce, která zobrazí zprávu odpovídající chyby, že došlo k a kde je to možné, umožňuje uživateli umožní určit, jaká akce má být výběrem určité tlačítko Další. Potom vrátí číselný kód na proceduru, která je volána.
   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
				

Zpracování uživatelských přerušení

Uživatel může přerušit Visual Basic for Applications procedury stisknutím kombinace kláves CTRL + BREAK nebo ESC (COMMAND + tečka v systému Macintosh). Je možné zakázat přerušení u procedur v hotových aplikací. Nicméně pokud zakážete přerušení uživatele v dokončení postupu, můžete zajistit, aby procedury je upozorněn tak, aby jej můžete zavřít soubory, odpojit od sdílených prostředků nebo obnovit změněné proměnných před vrácením řízení aplikace uživatele, že došlo k přerušení.

Můžete provést soutisk uživatele přerušení své postupy nastavením EnableCancelKey vlastnost xlErrorHandler. Je-li tato vlastnost nastavena, všechny přerušení vygeneruje run-time, číslo chyby 18, které mohou chycených pomocí chybu v příkazu. Lze zpracovávat chyby zastavit postup a ukončit program. Pokračujte postupem po ulovených do pasti chybu běhu používá příkazu obnovit, přerušení ignorováno.

Je také možné zcela ignorovat přerušení uživatele nastavením vlastnosti EnableCancelKey na xlDisabled. V tomto stavu ignorovány všechny pokusy uživatelem přerušit spuštěné postup. Chcete-li obnovit výchozí přerušení, zpracování, změňte nastavení vlastnosti EnableCancelKey na xlInterrupt. Chcete-li zabránit postup trvale zakázání přerušení uživatelů, aplikace Microsoft Excel vždy obnoví výchozí nastavení vlastnosti EnableCancelKey xlInterrupt vždy, když postup dokončení jeho spuštění. Chcete-li zajistit, že správně zpracován přerušení do kódu, musíte explicitně zakázat nebo pokaždé, když postup proveden soutisk přerušení. Je třeba poznamenat, tento popisovač přerušení pouze jeden může být použita pro každý postup a používané pro všechny chyby režimu run-time, se kterými se tento postup stejný popisovač.

Následující příklad znázorňuje proceduru, která vyžaduje velké dobu pro dokončení. Pokud uživatel přeruší řízení, je vytvořit přesahy chybu. Přerušení uživatel nejprve potvrzuje, že postup by ve skutečnosti zastaveno a potom ukončí postup řádný způsobem.
   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
				
Pokud spustíte makro ProcessData a rychle stiskněte kombinaci kláves CTRL + BREAK, se zobrazí okno s výzvou, zda chcete zastavit zpracování záznamů zprávou. Zobrazí se okno klepnete-li na tlačítko Ano, jiný s "došlo k přerušení uživatele" se zprávou. Pokud klepnete na tlačítko OK v tomto poli zprávu, Makro končí. Pokud klepnete na tlačítko Ne v prvním poli zprávu, makro pokračuje.

Obnovení příkazu

Příkazu Resume obnoví kódu po chybě rutiny zpracování bylo dokončeno.

Odkazy

Aplikace Excel 97

Další informace o chybách soutisku makra klepněte na kartě Rejstřík v aplikaci Microsoft Excel 97 Nápověda pro Visual Basic, zadejte následující text
přesahy, vytváření chyb
a potom poklepejte na vybraný text, přejděte na téma "Zachytitelné chyby".

Excel 7.0

Další informace o soutisku makro chyby klepněte na kartě Rejstřík v aplikaci Microsoft Excel 7.0 nápovědu, zadejte následující text
Chyba vytváření přesahů
a potom poklepejte na vybraný text, přejděte na téma "Chyba přesahy".

Aplikace Excel 5.0

V "Jazyka Visual Basic uživatelské příručce," verze 5.0, kapitola 9, "Zpracování chyb a chybové hodnoty," naleznete v následujících tématech:
  • "Zabraňuje kódu ze zastavení nebo jednající nestandardně"
  • "Vytvoření chybové hodnoty, bez přerušení kódu"
  • "Pomocí předdefinované hodnoty Chyba aplikace Microsoft Excel"
  • "Techniky rozšířená chyba zpracování"

Vlastnosti

ID článku: 146864 - Poslední aktualizace: 19. ledna 2007 - Revize: 3.4
Informace v tomto článku jsou určeny pro produkt:
  • 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 pro počítače Macintosh
  • Microsoft Excel 5.0a pro počítače Macintosh
Klíčová slova: 
kbmt kbdtacode kbfaq kbhowto kbprogramming KB146864 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:146864

Dejte nám zpětnou vazbu

 

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