On Error Deyimi (Visual Basic)
Hata işleme yordamını etkinleştirir ve yordam yordam içindeki konumunu belirtir; Ayrıca bir hata işleme yordamı devre dışı bırakmak için kullanılır.
Olmayan bir On Error deyimi, ortaya çıkan herhangi bir çalışma zamanı hatası önemli: bir hata iletisi görüntülenir ve çalışmayı durdurur.
Mümkün olduğunda, yapılandırılmamış özel durum işleme kullanmak yerine kendi kodunuzla işleme yapılandırılmış özel durum kullanmak öneririz ve On Error ifadesi.Daha fazla bilgi için bkz. Try...Catch...Finally Deyimi (Visual Basic).
[!NOT]
Error Anahtar sözcüğünü kullanılan de Error Deyimi, geriye doğru uyumluluk için desteklenir.
On Error { GoTo [ line | 0 | -1 ] | Resume Next }
Bölümleri
Terim |
Tanım |
GoToline |
Gerekli belirtilen satırda başlayan hata işleme yordamını etkinleştirir line bağımsız değişkeni.line Herhangi bir etiket satırı veya satır numarası bağımsız değişkenidir.Bir çalışma zamanı hatası oluştuğunda hata işleyicisi etkin hale getirme, belirtilen satır dalları kontrol eder.Belirtilen satır aynısı olması On Error deyimi veya derleme zamanı hatası oluşur. |
GoTo 0 |
Etkin hata işleyicisi geçerli yordamdaki devre dışı bırakır ve ona sıfırlar Nothing. |
GoTo -1 |
Kendisine sıfırlar ve geçerli yordamdaki etkin özel durumu devre dışı bırakır Nothing. |
Resume Next |
Bir çalışma zamanı hatası oluştuğunda, Denetim hemen nerede hata oluştu ve o noktadan itibaren yürütülmeye olan deyimden sonraki deyime geçer olduğunu belirtir.Bu formu kullanmak yerine On Error GoTo nesnelerine erişirken. |
Notlar
[!NOT]
Yapılandırılmamış bir özel durum işleme kullanmak yerine mümkün olan her durumda, kodunuzdaki yapılandırılmış özel durum işleme kullanmanızı öneririz ve On Error ifadesi.Daha fazla bilgi için bkz. Try...Catch...Finally Deyimi (Visual Basic).
"Etkin" hata işleyicisi tarafından açık biri olan bir On Error ifadesi."Etkin" hata işleyicisi hata işleme sürecinde olan etkin bir denetleyicisidir.
Bir hata işleyicisi etkinken, bir hata oluşursa (hata oluşumunu arasında ve bir Resume, Exit Sub, Exit Function, veya Exit Property deyimi), geçerli yordamın hata işleyicisi hata işleyemez.Denetim için GetTypeId yordamını döner.
Etkin hata işleyicisi GetTypeId yordamını varsa, hatayı işlemek için etkinleştirilir.Arama yordamın hata işleyicisi de etkinse etkinleştirilmiş, ancak etkin olmayan, hata işleyicisi bulana kadar denetim geri önceki arama yordamlar geçirir.Böyle bir hata işleyicisi bulunamazsa, gerçekte oluşan noktasında önemli bir hatadır.
Hata işleyicisi denetim bir GetTypeId yordamını için geri gönderdiği her zaman bu yordamı, geçerli yordam haline gelir.Herhangi bir yordam hata işleyicisinde hata yapılmaktadır kez belirlenen noktada geçerli yordamdaki yürütülmesine devam Resume ifadesi.
[!NOT]
Hata işleme yordamı değil bir Sub yordam veya bir Function yordam.Kod satır etiket veya bir satır numarası işaretlenmiş bir bölümdür.
Number özelliği
Hata işleme yordamları dayanan değeri Number özelliðinin Err hatanın nedenini belirlemek için nesne.Yordam sınamak veya ilgili özellik değerlerini kaydetmek gerekir Err önce başka bir hata oluşabilir veya hataya neden olabilecek bir yordam önce denir nesne.Özellik değerleri Err nesneyi yansıtmak yalnızca en son hata.Hata iletisi ile ilişkili Err.Number içinde yer alan Err.Description.
Throw deyimi
İle harekete geçirilen bir hata Err.Raise yöntemi ayarlar Exception yeni oluşturulan bir örneği için özellik Exception sınıfı.Türetilmiş bir özel durum türleri, özel durumlar yükseltme desteklemek için bir Throw deyimi dilde desteklenir.Bu durum için özel durum örneği olan tek bir parametre alır.Aşağıdaki örnekte bu özellikler özel destek mevcut durum ile nasıl kullanılabileceğini göstermektedir:
On Error GoTo Handler
Throw New DivideByZeroException()
Handler:
If (TypeOf Err.GetException() Is DivideByZeroException) Then
' Code for handling the error is entered here.
End If
Dikkat On Error GoTo ifade özel durum sınıfı ne olursa olsun tüm hataları yakalar.
Hata Resume Next
On Error Resume Nextneden hemen çalışma zamanı hatasına neden olan deyimden sonraki deyimi ile devam etmek veya en son hemen deyimiyle dışında yordam içeren arama yürütme On Error Resume Next ifadesi.Bu deyimi yürütme çalýþtýrma hatasýna rağmen devam etmek izin verir.Nerede hata ortaya çıkabilecek hata işleme yordamı yordam içinde başka bir konuma denetim aktarma yerine yerleştirebilirsiniz.Bir On Error Resume Next deyimi olur etkin olmayan başka bir yordamı çağrılırken bağlamını belirtir şekilde bir On Error Resume Next Bu yordam içindeki satır içi hata istiyorsanız her deyiminde adlı yordamına girildi.
[!NOT]
On Error Resume Next Yapýsý için tercih On Error GoTo diğer nesnelere erişim sırasında oluşturulan hatalarını işlerken.Denetimi Err bir nesneyi her etkileşim hakkında daha fazla nesne erişilen koduna göre belirsizlik kaldırdıktan sonra.Size hangi nesne hata kodunu yerleştirdiğiniz emin olabilirsiniz Err.Number, hangi nesnenin özgün hata oluşturulan yanı (belirtilen nesne Err.Source).
Error GoTo 0
On Error GoTo 0hata işleme geçerli işlemde devre dışı bırakır.0 Numaralı satırı yordamı içerse bile, hata işleme kodu başlangıç satır 0 belirtmez.Olmayan bir On Error GoTo 0 deyimi, bir hata işleyicisi otomatik olarak devreden bir yordam çıkıldığı zaman.
Hata GoTo -1
On Error GoTo -1Geçerli yordamdaki özel durumu devre dışı bırakır.-1 Numaralı satırı yordamı içerse bile, hata işleme kodunu başlangıç -1 satır belirtmiyor.Olmayan bir On Error GoTo -1 deyimi, bir özel durum otomatik olarak devreden bir yordam çıkıldığı zaman.
Hata işleme kodu hata oluştuğunda çalıştırmasını engellemek için bir Exit Sub, Exit Function, veya Exit Property hemen önce aşağıdaki parçası gibi hata işleme yordamı ifadesi:
Public Sub InitializeMatrix(ByVal Var1 As Object, ByVal Var2 As Object)
On Error GoTo ErrorHandler
' Insert code that might generate an error here
Exit Sub
ErrorHandler:
' Insert code to handle the error here
Resume Next
End Sub
Burada, hata işleme kodunu izleyen Exit Sub deyimi ve önündeki End Sub yordam akışından ayırmak için deyimi.Hata işleme kodu bir yordam içinde herhangi bir yere yerleştirebilirsiniz.
Untrapped hataları
Nesne bir yürütülebilir dosya çalışırken nesneleri untrapped hataları denetleme uygulama döndürülür.Uygun seçenekleri yalnızca ayarlarsanız, geliştirme ortamında denetleyici uygulamayı untrapped bir hata döndürülmez.Hangi seçenekleri kümesi hata ayıklama sırasında onları nasıl ve ana sınıfları oluşturmak için olması gereken bir açıklama ana uygulamanızın belgelerine bakın.
Diğer nesnelere erişen bir nesne oluşturduğunuzda, başa geçmesi işlenmemiş hatalarý iþlemeye denemelisiniz.Hata kodları eşleştirirseniz olamaz Err.Number biri kendi hataları ve ardından geçişi olarak nesnenizin çağırana geri.Aldığınız hata kodu ekleyerek kendi hata belirtmelidir VbObjectError sabit.Aldığınız hata kodu 1052 ise, örneğin, aşağıdaki biçimde atayın.
Err.Number = vbObjectError + 1052
Uyarı |
---|
Windows dinamik bağlantı kitaplıkları (DLL) yapılan çağrı sırasında sistem hataları, özel durumlar yükseltmeyin ve Visual Basic hata yakalama ile yakalanan.Her dönüş değeri için başarı veya başarısızlık (uyarınca API belirtimlerini) DLL'SİNİN işlevleri çağırırken denetleyin ve değer hata durumunda, teslim Err nesnesinin LastDLLError özelliği. |
Örnek
Bu örnekte ilk kullanan On Error GoTo bir hata işleme yordamı yordam içindeki konumunu belirtmek için ifade.Örnekte, hata numarası 6 sıfıra bölme girişiminde oluşturur.Hata, hata işleme yordamı işlenir ve denetimi hatası nedeniyle ifadesine sonra döndürülür.On Error GoTo 0 Deyimi hata yakalama devre dışı bırakır.Sonra On Error Resume Next sonraki deyimi ile oluşturulan hata bağlamının belirli bilinmesi böylece hata yakalama erteleme deyimi kullanılır.Dikkat Err.Clear temizlemek için kullanılan Err hata ele sonra nesnenin özelliklerini.
Public Sub OnErrorDemo()
On Error GoTo ErrorHandler ' Enable error-handling routine.
Dim x As Integer = 32
Dim y As Integer = 0
Dim z As Integer
z = x / y ' Creates a divide by zero error
On Error GoTo 0 ' Turn off error trapping.
On Error Resume Next ' Defer error trapping.
z = x / y ' Creates a divide by zero error again
If Err.Number = 6 Then
' Tell user what happened. Then clear the Err object.
Dim Msg As String
Msg = "There was an error attempting to divide by zero!"
MsgBox(Msg, , "Divide by zero error")
Err.Clear() ' Clear Err object fields.
End If
Exit Sub ' Exit to avoid handler.
ErrorHandler: ' Error-handling routine.
Select Case Err.Number ' Evaluate error number.
Case 6 ' Divide by zero error
MsgBox("You attempted to divide by zero!")
' Insert code to handle this error
Case Else
' Insert code to handle other situations here...
End Select
Resume Next ' Resume execution at same line
' that caused the error.
End Sub
Gereksinimler
Namespace: Microsoft.VisualBasic
Derleme: Visual Basic çalışma zamanı kitaplığı (' Microsoft.VisualBasic.dll)
Ayrıca bkz.
Başvuru
Try...Catch...Finally Deyimi (Visual Basic)