2016-04-11 15 views
4

Kodumun çöktüğü satır numarasını bulmaya çalışıyorum ancak bu sitedeki birçok açıklama düzeyim için karmaşık görünüyor.VBA'da Hata Satırı Numarasını Bul

Kodum temelde aşağıdaki gibidir ve nerede kırıldığını bilmiyorum.

Sub1 
    Call function1 
    Call function2 
End Sub 

Bu sitedeki diğer yanıtlar sadece kısa bir işlev gibi görünüyor. Ancak, kodumdaki işlevi nereden arayacağımı veya açılır mesajın nasıl alınacağını bilmiyorum. Eğer benim alt1 kodumu kendi fonksiyonlarına sokmam gerekiyorsa, ben de nerede olduğunu bilmiyorum. Burada acemi. kodunuzu satır numaralarını yoksa

+0

Hata istemi üzerine 'Debug' bastığınızda oluştu koduna alınmaz Are:

emin asla üretim kodunda Stop ve Resume talimatlar terk yap? Ayrıca "Alt1" yerine "Sub1" – newguy

+0

olmalıdır "Benim kod temelde aşağıdaki gibidir". Gerçek kodunuzdan ziyade kodunuzu "temelde" olan bir şey göndermenin bir nedeni var mı? –

cevap

6

ardından VBA size satır numaralarını vermek gibi bir yolu vardır.

Sen can yazma VBA ve bunu yapmak için 1980-süsü:

Sub1 
On Error GoTo 100 
10 Call Function1 
20 Call Function2 
90 Exit Sub 
100 Debug.Print Err.Message & " on line " & Erl 
End Sub 

Ama bunu yapmak istemiyoruz. Gerçekten, , numaralı telefon numarasına ihtiyacınız yok.

, çalışma zamanı hataları'un kullandığı daha küçük işlevlere ihtiyacınız vardır. Bir çalışma zamanı hatası oluştuğunda

On Error GoTo ErrHandler 

, yürütme ErrHandler denilen hat etiket atlar.

 ... 
    Exit Sub 
ErrHandler: '<< the line label is denoted with a colon 

Bu işleyicide ne var? Eğer hata ayıklama ediyorsanız, orada sadece Stop yürütme istiyor ve halk incelemek olabilir:

Stop 

Sonra sonraki satırda Resume ekleyin ve içine F8 adım için bastırın. Resume, hataya neden olan çağrıya döner. Bu bir işlev çağrısı ise, o zaman çalışma zamanı hatalarını işlemek gerekir.

Sub WhenWillThisEnd() 
    On Error GoTo ErrHandler 
    Debug.Print 42/0 
    Exit Sub 
ErrHandler: 
    Resume 'jumps back to the line that caused the error 
    Resume Next 'resumes execution on the line right after the one that went boom 
End Sub 
+6

On yıldan fazla bir süredir VBA programlamasına rağmen 'Erl' hakkında bir şey bilmiyordum. Stack Overflow'u seviyorum - her gün yeni bir şeyler öğreniyorsunuz. –

+0

bende, 5 yıl VBA'da, şimdi sadece bunu düşünüyorum. Bir numarayı, her çizgiyi rakamlarla etiketleyen bir kodu gördüm ve birisinin neden her satırı etiketlediğini düşünüyordum ... Şimdi nedenini biliyorum: D – Rosetta

İlgili konular