Visual Basic for Applications yakalama hata

Makale çevirileri Makale çevirileri
Makale numarası: 146864 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Microsoft Visual Basic for Applications makrosu bir çalıştırma hatası ortaya çıktığında, ekranda bir hata iletisi görüntülenir ve makronun durur veya unpredictably olarak davranır.

Kilitlenen veya unpredictably behaving uygulama önlemek için <a0></a0>, hata ele geçirilip makro bu anlatır makro kodu içerebilir. Tehlikesini ve bir çalışma zamanı hata işleme işlemi "hata yakalama" olarak adlandırılır Uygulama hata nasıl belirten yönergeler kümesi, "hata işleme yordamını" veya "hata işleyicisi" denir.

Daha fazla bilgi

Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Buna satılabilirlik veya belirli bir amaca uygunluk zımni garantileri de dahildir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler. Çeşitli hatalar yakalanan, Visual Basic kodu çalışırken karşılaşabilir. Hata yakalama, Microsoft Excel'de aşağıdaki işlev ve deyimleri kullanarak yararlanabilirsiniz.

Hakkında hata bildirimi

Açık bir hata bildirimi, Visual Basic for Applications, başlatmak veya hata yakalama durdurmak neden olur. Ayrıca, açık hata bildirimi ifadeler hatayla karşılaşılırsa, yürütülecek bir dizi belirtir.

Ek bilgi için lütfen aşağıdaki Microsoft Knowledge Base'deki makaleleri bakın:
141571Bir makro tanıtıcı hatalar için "Hatası" nasıl kullanılır

Işlev hata

ERR işlevi karşılaşılan hata verir.

Hata işlevini kullanarak bir örnek:
   Msgbox "The most recent error number is " & Err & _
      ". Its message text is: " & Error(Err)
				
aşağıdaki tabloda, Err işlevini kullandığınızda karşılaşabileceğiniz yakalanabilir bir hata kodlarının listesini içerir.
   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)
				
Ek bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
142138OFF: Bir açıklama yakalanabilir bir hata Visual Basic'te uygulamalar için

Hata işlev

Hata işlevini, belirli hata sayıya karşılık gelen hata iletisi döndürür.

Hata işlevini kullanmaya örnek:
   Msgbox "The message text of the error is: " & Error(Err)
				

Hata bildirimi

Hata bildirimi hata geçtiği Err işleve bir özel hata numarası atamanıza olanak sağlayarak taklit eder. Bu kullanıcı tanımlı hata değerleri için yordamlarınıza tanımlamak ve her zaman VARIANT veri tipi değişkenleri depolanan değerlerdir. Bu tür bir hata değeri BIR çok yordamlarda, birden fazla bağımsız değişken kabul etmek ve bir değer kullanılır. Örneğin, dönüş değeri, yalnızca bağımsız bir belirli aralıkta geçerli olduğunu varsayın. Kullanıcının sağladığı bağımsız değişkenler için yordamınız test edebilirsiniz ve bağımsız değişkenler kabul edilebilir aralıkta, yordamın dönüş uygun hata değeri olabilir.

Hata alt türü olan bir Variant veri türü, "hata değeri" terimi kullanıldığında, bu genellikle bir değişkeni, Variant türü olduğunu ve Visual Basic for Applications, kullanıcı tanımlı bir hata olarak tanıdığı bir değer içerdiği anlamına gelir. Hata değerleri, bir yordam hata koşulu ortaya çıkan belirtmek için kullanılır. Sıradan değişkenleri ve değil hataları tanındığından normal çalışma zamanı hataları farklı olarak, bu hatalar kodunuzu kesme değil. Yordamlarınıza bu hata değerleri için sınama ve uygun düzeltici eylemleri.

Hata bildirimi, çalışma zamanı hataları benzetimini yapmak için de kullanabilirsiniz. Uygulamalarınızı sınarken veya bir çalıştırma hatası eşit olacak şekilde belirli bir koşulu değerlendirmek istediğinizde özellikle yararlıdır. Hata kodu için bir <a0>hata</a0> deyiminde hata sağlayarak Visual Basic for Applications çalışma zamanı hatası benzetimi. Hata bildirimi hataları kendi kullanıcı tanımlı bir Visual Basic for Applications çalışma zamanı hatası karşılık gelmeyen bir hata kodu sağlayarak oluşturmak için de kullanılabilir. Bu makalenin ("Hata işlev" bölümü) altında yerleşik hataların listesini içeren bir tablo görüntülenir. Bu aşamada, Visual Basic for Applications tüm kullanılabilir numaralarını yerleşik hatalar için kullanmaz. Ileride Visual Basic for Applications'ın sürümleri, dahili numaraları gibi daha yerleşik - hatalara eklenecek olan artacaktır. Hata numaralarınızın 50.000 adresindeki başlatın ve daha sonra olası çakışmaları önlemek için en çok 65.535 inin önerilir.

Örnek kullanarak hata bildirimi Benzet için çalışma zamanı hatası:
   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
				
, sınama makro çalıştırmak, "kendi hata oluştu" içeren bir ileti kutusu ileti alıyorsunuz.

CVErr işlevi

CVErr işlevi hata değeri oluşturmak için kullanılır. Bir bağımsız değişken ya da bir tamsayı olmalı veya bir tamsayı içeren bir de?i?ken olarak işlev alır CVErr.
   NoRadius = CVErr(2010)

   NotANumber = 2020
   InvalidArgument = CVErr(NotANumber)
				
CVErr işlevini kullanarak bir örnek:
   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
				

Yerleşik hata değerleri kullanma

Microsoft Excel'de yedi yerleşik hata değerleri vardır. Hata numarasını (sabit), harflerden oluşan bir hata değeri ve dönüştürülmüş bir hata değeri, aşağıdaki tabloda gösterilmektedir.
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)
				
CVErr işlevini kullanarak hata değerleri için kullanıcı tanımlı hatalı--sayı olarak çalışacak şekilde dönüştürüldü, bu yerleşik bir çalışma sayfası hata değerleri bulunan iş. Visual Basic for Applications için çalışma sayfası hataları olan tek fark, hata numaraları olarak yerleşik sabitler sağlar ve harflerden oluşan hata değerleri sağlar. Bu öğe kullanıcı tanımlı hata değerleri için sağlanır. Yukarıdaki tabloda gösterilen literal hata değerleri köşeli ayraçlar içine alınmalıdır.

Yerleşik hata kullanmaya örnek Değerler:
   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
				

Hata kodu merkezileştirme.

Visual Basic for Applications makroları için hata işleme kodu eklediğinizde, aynı hataları tekrar tekrar işlenen fark. Kodunuzu ve birkaç genel hata durumları işlemek için hata işleme kodunuzu çağırabileceğiniz yordamlar yazarak, kod yazmak için gereken çaba boyutunu azaltabilirsiniz.

Aşağıdaki örnek bir işlev yordamının oluştu hata karşılık gelen bir ileti görüntüler; mümkün olan yerlerde, kullanıcının belirli bir düğmeyi seçerek sonraki gerçekleştirilecek eylemi sağlar. Sonra kodu numarası da denilen yordamına döndürür.
   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
				

Kullanıcı işleme kesmeleri

Bir kullanıcı, CTRL + BREAK veya ESC (COMMAND + NOKTA Macintosh'ta) tuşlarına basarak bir Visual Basic for Applications yordamı kesebilirsiniz. Tamamlanmış uygulamalarınızda yordamlarıyla kesmeler devre dışı bırakmak olasıdır. Ancak, kullanıcı kesme yordamı bittiğinde, devre dışı bırakmayın, böylece, dosyaları kapatabilir, paylaştırılmış kaynaklarla bağlantısını sona erdirmek veya değiştirilmiş değişkenleri kullanıcıya uygulamanın denetimi döndürmeden önce geri kesme oluştuğunda yordamınız bildirilir emin olabilirsiniz.

EnableCancelKey ayarlayarak kullanıcı kesme yordamlarınıza yakalayabilir xlErrorHandler özelliği. Bu özelliği ayarlandığında, tüm kesmeler bir çalışma zamanı hata numarası 18, bir oturum açma hatası'ı kullanarak yakalanan oluşturacak ifadesi. Yordamı durdurmak ve bu programdan çıkmak için hatayı işleyebilir. Kesme yordamı yakalanan bir çalıştırma hatasından sonra devam etmek için Sürdür deyimi kullanılırsa, göz ardı edilir.

Kullanıcı kesme tamamen yoksayması için xlDisabled EnableCancelKey özelliğini ayarlayarak da olasıdır. Bu durumda, Microsoft Excel, kullanıcı tarafından tüm denemeleri çalışan yordamı kesme yok sayar. Işlem varsayılan kesme geri yüklemek için <a0></a0>, xlInterrupt için <a0>EnableCancelKey</a0> özelliğinin ayarını değiştirin. Yordamı, Yürütme tamamlandığında, her kullanıcı kesme kalıcı olarak devre dışı bir yordam önlemek için Microsoft Excel'in her zaman EnableCancelKey</a0> özelliğinin varsayılan ayarını xlInterrupt için yükler. Kesmeleri doğru kodunuz içinde işlenme emin olmak için açıkça devre dışı veya yordamı yürütülen her kesmelere tuzak gerekir. Bunu unutulmamalıdır, tek bir kesme isteği işleyicisi her yordam için kullanılabilir ve aynı işleyicisi Bu yordamla karşılaştı, tüm çalışma zamanı hataları için kullanılır.

Aşağıdaki örnek, büyük bir zaman tamamlamak için süre gerektiren bir yordam gösterir. Hata yordamı kullanıcı keser, yakalanan. Kullanıcı kesme ilk yordamı gerçekten durdurulacak sonra bu yordamın düzenli bir şekilde çıkılıyor olduğunu doğrular.
   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
				
ProcessData makroyu çalıştırmak ve hemen CTRL + BREAK tuşlarına, işlem kayıtları Durdur etkinleştirilip etkinleştirilmeyeceğini isteyen bir ileti kutusu görünür. Evet'i tıklatırsanız, "kullanıcı kesme oluştu" ile başka bir ileti kutusu görünür. Bu ileti kutusunda Tamam'ı tıklatırsanız, makro sona erdirir. Hayır'ı ilk ileti kutusu öğesini varsa, makroyu devam eder.

Özgeçmiş Ekstresi

Bir hata yordamı tamamlandıktan sonra devam ifadesi kod yürütülmesine devam ettirir.

Referanslar

Excel 97

Yakalama makro hataları hakkında daha fazla bilgi için dizin sekmesini Microsoft tıklatın 97 Visual Basic Yardımı'nı Excel, aşağıdaki metni yazın.
Yakalama hataları
ve "Yakalanabilir hatalar" konuya dönmek için seçili metni çift tıklatın.

Excel 7.0

Makro hataları yakalama hakkında daha fazla bilgi için dizin Microsoft sekmesinde tıklatın 7.0 Yardım Excel, aşağıdaki metni yazın.
hata yakalama
ve "Hata yakalama" konusuna gidin seçili metni çift tıklatın.

Excel 5.0

"Visual Basic Kullanım Kılavuzu'nda" sürüm 5. 0, Bölüm 9, "İşleme hataları ve hata değerleri," aşağıdaki konulara bakın:
  • "Kimden, durdurma veya Unpredictably davranan kodunuzu engeller."
  • ", Kodunuzu kesme verme hata değerleri oluşturma"
  • "Microsoft Excel'in yerleşik hata değerlerinden kullanma"
  • "Gelişmiş hata işleme teknikleri"

Özellikler

Makale numarası: 146864 - Last Review: 19 Ocak 2007 Cuma - Gözden geçirme: 3.4
Bu makaledeki bilginin uygulandığı durum:
  • 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 for Macintosh
  • Microsoft Excel 0.12acres for Macintosh
Anahtar Kelimeler: 
kbmt kbdtacode kbfaq kbhowto kbprogramming KB146864 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:146864

Geri Bildirim Ver

 

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