2015-01-29 18 views
5

Kodumda verilen herhangi bir satırda, kodum bu satırda bir hatayla karşılaşırsa ne olacağını öğrenmek için başka bir komutla birlikte Debug.Print() öğesini kullanabilir miyim?Geçerli hata işleme yöntemini belirlemek için sözdizimi VBA'da

Geçerli hata işleme yordamının Goto 0'a mı, Devam Et mi yoksa Bazı etiketlere mi gitmesi gerektiğini öğrenmek için Debug.Print içindeki herhangi bir deyimi kullanabilir miyim? , Hatalar GoTo 0 (durdurmak ve gösteri hatası) Kodun, Resume Next belirli bir çizgi (satır atla) olup olmadığını belirlemek için bir yol arıyorum

Debug.Print(OnErrorMode) 

:

ben gibi bir şey canlandırdığım veya GoTo Label (Etikete atla), On Error kodunun bulamadığım bir yere gömülebilir. Mümkün mü?

+0

Sorunuzun ayrıntı eksikliği var gibi görünüyor, lütfen sorunuza biraz iltifat ekleyin. – PaulFrancis

+0

[Bu] (http://stackoverflow.com/questions/157747/vbscript-using-error-handling) adresine bir göz atın ve ardından sorunuzu belirli bir sorunla çerçeveleyin –

+0

Düzenledim ve daha iyi açıklamaya çalıştım. – user1283776

cevap

6

VBA ve VB (5 ve 6) kullanarak on yılı aşkın bir süredir, var, tek bir referans görmemiştim bile uzaktan bile, hangi hata yakalama koşullarının mevcut olduğunu belirleyebiliyor olabilir. Derleyici kesinlikle biliyor olsa da, maruz kalmaz.

Bana göre sorun, hata yakalamanızı nasıl yapılandıracağınız konusunda olabilir.

Altyordamları, On Hata ile aynı alt yordamda bulunan tek bir Hata Goto deyiminde kaydırıyorum. Bir çıkışım var ve hata oluştuğunda ne olduğunu günlüğe kaydederim böylece hatayı düzeltebilirim. Sonra debug.print'i kullanabilir veya günlüğe eklenen hata ayıklama bilgileri içeren bir dize oluşturabilirim.

Sub main() 
     On Error GoTo Main_Error 
     'Insert Code Here 
     Exit Sub 
     Main_Error: 
     WriteLog Err.Number, Err.Description 
     MsgBox ("The program encoutnered an error.") 
    End Sub 
    Private Sub WriteLog(ErrNum As Integer, ErrDes As String) 
     Open "Errors.txt" For Append As #1 
     Print #1, Now & " " & ErrNum & " - " & ErrDes 
     Close #1 
    End Sub 

kullandığım ikinci desen bir hata bir dosya (dosyalar eksik olabilir) veya bir veritabanı açma gibi oluşabilecek bu iyi bir şans olduğu alanlarda olduğunu. Sonra hata yakalamayı try catch bloğu gibi kullanırım.

Private Function LoadFile() As Boolean 
    On Error GoTo Main_Error 
    'Code before a potentially error-prone statement 
    On Error Resume Next 
    Open "aMissingFile.txt" For Input As #1 
    If Err.Number <> 0 Then 
     MsgBox ("aMissingFile.txt is missing") 
     LoadFile = False 
     Exit Function 
    End If 
    On Error GoTo LoadFile_Error 
    'The rest of your code 
    LoadFile = True 
    Exit Function 
LoadFile_Error: 
    WriteLog Err.Number, Err.Description 
    MsgBox ("The program encoutnered an error.") 
    LoadFile = False 
End Function 

Bu kolay hataları ve hata ayıklama ile uğraşan yapan tek Açık hata deyimi dışında yorum kadar kolaydır. Err.number'in hata kodu dönüşünü listelediğini unutmayın, böylece farklı hata türlerini işlemek için mantık ekleyebilirsiniz.

İlgili konular