On Error Deyimi (Visual Basic)

Bir hata işleme yordamını sunar ve yordamın içindeki konumunu belirtir; , hata işleme yordamını devre dışı bırakmak için de kullanılabilir. On Errorİfade yapılandırılmamış hata işlemede kullanılır ve yapılandırılmış özel durum işleme yerine kullanılabilir. Yapılandırılmış özel durum işleme .NET içinde yerleşiktir, genellikle daha etkilidir, bu nedenle uygulamanızda çalışma zamanı hatalarını işlerken önerilir.

Hata işleme veya özel durum işleme olmadan, oluşan tüm çalışma zamanı hataları önemli: bir hata iletisi görüntülenir ve yürütme durdu.

Not

ErrorAnahtar sözcüğü, geri uyumluluk için desteklenen hata bildirimindede kullanılır.

Syntax

On Error { GoTo [ line | 0 | -1 ] | Resume Next }

Bölümler

Süre Tanım
GoTosatır Gerekli satır bağımsız değişkeninde belirtilen satırda başlayan hata işleme yordamını sunar. Satır bağımsız değişkeni herhangi bir satır etiketi veya satır numarasıdır. Bir çalışma zamanı hatası oluşursa, dalları belirtilen satıra göre kontrol edin ve hata işleyicisini etkin hale getirir. Belirtilen satır, deyimle aynı yordamda On Error veya bir derleme zamanı hatasıyla oluşmalıdır.
GoTo 0 Etkin hata işleyicisini geçerli yordamda devre dışı bırakır ve öğesini olarak sıfırlar Nothing .
GoTo -1 Etkin özel durumu geçerli yordamda devre dışı bırakır ve öğesini olarak sıfırlar Nothing .
Resume Next Bir çalışma zamanı hatası oluştuğunda, denetimin Hatanın gerçekleştiği deyimin hemen ardından ifadeye ve yürütmenin bu noktadan devam edeceğini belirtir. Nesnelere erişmek yerine bu formu kullanın On Error GoTo .

Açıklamalar

Not

Yapılandırılmamış özel durum işleme ve bildirisini kullanmak yerine kodunuzda yapılandırılmış özel durum işlemeyi kullanmanızı öneririz On Error . Daha fazla bilgi için bkz . TRY... Yakala... Finally ekstresi.

Bir "etkin" hata işleyicisi bir deyime göre açılmış bir hatadır On Error . Bir "etkin" hata işleyicisi, bir hatayı işleme sürecinde olan etkin bir işleyicidir.

Hata işleyicisi etkinken bir hata oluşursa (hata ve bir,, Resume Exit Sub Exit Function veya Exit Property bildiri arasında), geçerli yordamın hata işleyicisi hatayı işleyemez. Denetim, çağıran yordama döner.

Çağıran yordamın etkin bir hata işleyicisi varsa, hatayı işlemek için etkinleştirilir. Çağıran yordamın hata işleyicisi de etkinse, etkin ancak etkin olmayan bir hata işleyicisi bulunana kadar, denetim önceki çağrı yordamlarıyla geri geçirilir. Böyle bir hata işleyicisi bulunmazsa, hata gerçekten gerçekleştiği noktada önemli olur.

Hata işleyicisi denetimi bir çağrı yordamına geri geçirdiğinde, bu yordam geçerli yordam olur. Herhangi bir yordamda hata işleyicisi tarafından bir hata işlendikten sonra, yürütme geçerli yordamda deyimin tarafından belirlenen noktada devam eder Resume .

Not

Hata işleme yordamı bir Sub yordam veya Function yordam değildir. Bir satır etiketi veya satır numarası tarafından işaretlenen kodun bir bölümüdür.

Number özelliği

Hata işleme yordamları, Number Err hatanın nedenini öğrenmek için nesnesinin özelliğindeki değeri kullanır. Yordam, Err diğer herhangi bir hata gerçekleşebilmesi veya bir hataya neden olabilecek bir yordam çağrılmadan önce, nesne içindeki ilgili özellik değerlerini test etmelidir veya kaydeder. Nesnedeki özellik değerleri Err yalnızca en son hatayı yansıtır. İle ilişkili hata iletisi Err.Number içinde bulunur Err.Description .

Throw Deyimi

Yöntemiyle oluşturulan bir hata, Err.Raise Exception özelliği, sınıfının yeni oluşturulmuş bir örneğine ayarlar Exception . Türetilmiş özel durum türleri için özel durumların çıkarılmasını desteklemek amacıyla, Throw dilde bir ifade desteklenir. Bu, oluşturulacak özel durum örneği olan tek bir parametre alır. Aşağıdaki örnek, bu özelliklerin mevcut özel durum işleme desteğiyle 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

On Error GoToDeyimin, özel durum sınıfından bağımsız olarak tüm hataları yakaladığı konusunda dikkat edin.

Hata durumunda devamında

On Error Resume Next yürütmeye, çalışma zamanı hatasına neden olan deyimin hemen ardından gelen deyimle devam etmesine neden olur ya da deyimin bulunduğu yordamın en son çağrısından hemen sonra gelen deyimle devam eder On Error Resume Next . Bu ifade, yürütmenin çalışma zamanı hatasına rağmen devam etmesine izin verir. Hatanın gerçekleştiği hata işleme yordamını, yordamı yordamın içindeki başka bir konuma aktarmak yerine yerleştirebilirsiniz. On Error Resume NextBaşka bir yordam çağrıldığında bir ifade devre dışı bırakılır, On Error Resume Next Bu nedenle bu yordamda satır içi hata işleme istiyorsanız, çağrılan her yordamda bir ifade yürütmelisiniz.

Not

On Error Resume Next On Error GoTo Diğer nesnelere erişim sırasında oluşturulan hatalar işlenirken yapı tercih edilebilir. ErrBir nesneyle her bir etkileşime geçtikten sonra Denetim, kod tarafından hangi nesneye erişildiğine ilişkin belirsizliği ortadan kaldırır. Hangi nesnenin içinde hata kodu yerleştirdiğini Err.Number ve hangi nesnenin ilk olarak hatayı (içinde belirtilen nesne) üretdiğini de unutmayın Err.Source .

Hatada git 0

On Error GoTo 0 geçerli yordamda hata işlemeyi devre dışı bırakır. Yordam 0 sayılı bir satır içerse bile, hata işleme kodunun başlangıcı olarak line 0 belirtmez. Bir On Error GoTo 0 ifade olmadan, bir yordam çıkıldığında bir hata işleyicisi otomatik olarak devre dışı bırakılır.

Hatada GoTo-1

On Error GoTo -1 geçerli yordamda özel durumu devre dışı bırakır. Yordam numaralandırılmış bir satır içerse de, hata işleme kodunun başlangıcı olarak Line-1 ' i belirtmez. Bir On Error GoTo -1 ifade olmadan, bir yordama çıkıldığında bir özel durum otomatik olarak devre dışı bırakılır.

Hata oluştuğunda hata işleme kodunun çalıştırılmasını engellemek için, Exit Sub Exit Function Exit Property aşağıdaki parçada olduğu gibi, hata işleme yordamının hemen öncesine bir, veya ifadesini yerleştirin:

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 kodu Exit Sub ifadeyi izler ve End Sub yordam akışından ayırmak için deyimden önce gelir. Hata işleme kodunu bir yordamda herhangi bir yere yerleştirebilirsiniz.

Yakalangeri al hataları

Nesneler yürütülebilir bir dosya olarak çalıştırıldığında denetim uygulamasına nesneler üzerinde yakalangeri dönüş hataları döndürülür. Geliştirme ortamında, yalnızca uygun seçenekler ayarlandıysa denetim uygulamasına geri dönüş hataları döndürülür. Hata ayıklama sırasında ayarlanması gereken seçeneklerin açıklaması, nasıl ayarlanacağı ve konağın sınıf oluşturup oluşturamayacağını gösteren bir açıklama için ana bilgisayar uygulamanızın belgelerine bakın.

Diğer nesnelere erişen bir nesne oluşturursanız, geri aktardıkları işlenmemiş hataları işlemeye çalışırsınız. Bu durumda, içindeki hata kodlarını Err.Number kendi hatalardan biriyle eşleyin ve sonra bunları nesnenizin çağıranına geri geçirin. Hata kodunuzu sabite ekleyerek hatayı belirtmeniz gerekir VbObjectError . Örneğin, hata kodunuz 1052 ise, aşağıdaki gibi atayın:

Err.Number = vbObjectError + 1052

Dikkat

Windows dinamik bağlantı kitaplıkları (dll 'ler) için çağrılar sırasındaki sistem hataları özel durum oluşturmaz ve Visual Basic hata yakalama ile yakalanamaz. DLL işlevlerini çağırırken, her dönüş değerini başarılı veya başarısız (API belirtimlerine göre) olarak denetlemeniz gerekir ve hata durumunda nesnenin özelliğindeki değeri kontrol edin Err LastDLLError .

Örnek

Bu örnek öncelikle On Error GoTo bir yordam içindeki bir hata işleme yordamının konumunu belirtmek için ifadesini kullanır. Örnekte, sıfıra bölme girişimi 6 hata numarasını üretir. Hata, hata işleme yordamında işlenir ve denetim daha sonra hataya neden olan ifadeye döndürülür. On Error GoTo 0İfade hata yakalamayı kapatır. Daha sonra, On Error Resume Next Next ifadesinin oluşturduğu hatanın bağlamı belirli bir şekilde tanınabilmesi için hata yakalamayı erteleme için bu ifade kullanılır. Err.Clear Err Hata işlendikten sonra nesnenin özelliklerini temizlemek için kullanıldığını unutmayın.

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 the statement immediately 
                ' following the statement where the error occurred.
End Sub

Gereksinimler

Ad alanı: Microsoft. VisualBasic

bütünleştirilmiş kod: Visual Basic çalışma zamanı kitaplığı (Microsoft.VisualBasic.dll)

Ayrıca bkz.