2011-12-07 15 views
8

Excel VBA'da, Debug.Print yönergelerini "üretime" giden kodda bırakmak iyi bir uygulamadır. Bu, bir şeyler yanlış gittiğinde, kullanıcının makinesinde gerçek zamanlı sayfaları ayıklamak için oldukça kullanışlıdır. Visual Studio kapalıyken performansı etkiler mi? Eğer değilse, ne önerirsiniz?"Debug.Print" yönergelerini "üretime" giden kodda bırakmak iyi bir uygulama mıdır?

+0

do sen "Visual Studio" demek ama doğru, VBA bahsediyoruz? VBE mi demek istiyorsun? – aevanko

+0

Ahhh, evet sanırım şimdi insanların VBE olarak adlandırdığı şeyi anlıyorum ... Evet, sanırım :) [ALT + F11] – Jerome

+0

1) Eğer bir şeyler yanlış gittiğinde, kullanıcının ne yaptığını yakalamak önemliyse, Bir işlem günlüğü daha iyi bir seçenek görecekti. Koşuya veya gün başına yeni bir dosya başlat; 48 saatten fazla herhangi birini silin. Evet bir performans maliyeti var ama nasıl ölçersiniz? 2) Visual Studio, MS'in profesyonel dilleri için geliştirme ortamıdır. VB 2010, VBA/VBE'den yüzlerce kat daha hızlı ve binlerce harika tesise sahip. Bir çalışma sayfası kullanmak istiyorsanız Excel'e buradan ulaşabilirsiniz. –

cevap

21

Debug.Print talimat biraz performans kaybına sahip DO. Bu yüzden onları bir zillion kez idam edilen döngülerden kaçardım. Bu davalar haricinde, onları saklamanın iyi olduğunu düşünüyorum.
Ayrıca, koşulsuz derleme yönergeleri (#if), bir global sabitleyiciyi (#const) tümleşik olarak etkinleştirme ve devre dışı bırakma efektleri ile birlikte kullanabilirsiniz.

#CONST developMode = True 

sub Xyz 
    #If developMode Then 
    Debug.Print "something" 
    #End If 
End Sub 
+2

@iDevelop +1 Her gün yeni bir şey öğrenin - Excel'in koşullu derlemeyi desteklemediğini farketmedik! Teşekkürler. – dash

+0

ilginç görünüyor, teşekkürler! – Jerome

+0

+1'i desserve etmek için yeterince temizleyin :). Btw, koşullu derleme (ve bazı yararlı diğer şeyler) bu ilginç konuyla tartışıldı: http://stackoverflow.com/questions/1070863/hidden-features-of-vba – JMax

4

Genelde iki sürümüm vardır; hata ayıklama olmadan prod, ve hata ayıklama ile prod. Bu, catchall hata işleyicisi günlüğü ile birleştiğinde, bir kullanıcı bir sorunla karşılaşırsa, hata ayıklama sürümünü onlara dağıtabilir ve bunu çalıştırabilir.

Bu yorumları debug.print ifadeleriyle çalıştırdığım bir makro var, bu yüzden gerçek bir bakım yükü değil.

Hata ayıklama sürümünü her zaman çalıştırmayla ilgili sorun (ve Excel VBA ile genellikle bir performans olayı değil) uygulamanızın da gerekmediği bilgileri sürekli olarak yayınlamasıdır. Örneğin kontrollü elektronik tabloları olan bir ortamda, bu kötü bir şey olarak görülebilir. Küresel hata işleme açısından

, yine de hata işlemeyi istediğiniz her fonksiyon için Error GoTo'ON deyimini ihtiyaç yapabilirsiniz, ancak, boru bunlar ortak bir işleve.

Public Function HandleTheNastyErrors(E As ErrObject, ByVal writeLog As Boolean = True) 

    Select Case E.Number 

    Case xxx 

     ...specific error handling... 

    Case Else 
     ... Display a message to the user about how you dont know what happened....    
    End Select 

    If writeLog Then 

     ...Log Writing Code... 

    End If 

End Function 

Ve sonra, OnError:

ErrorHandler: 
Call HandleTheNastyErrors(Err, True) 

göster hile

+0

"Tümünü yakala" yla ilgili yorum yapabilir misiniz? Hataların nasıl akıllıca ve nasılsa genetik olarak şimdiye kadar nasıl ele alınacağına dair fikirlerim yok. Teşekkürler ! – Jerome

+0

@jeromeG İşte gidersiniz. Umarım yardımcı olur. – dash

+0

hata nesnesini kendiliğinden functon'a iletmek ... bu ilginç bir fikir. –

İlgili konular