2011-07-08 17 views
6

Görünüşe göre VBA kodu bir hücre formülünden (yani, bir "Kullanıcı Tanımlı İşlev" veya UDF) çağrıldığında, olağan VBA Arası Açık Hatası yok ' Çalış. Ben belgelenmiş Bu davranışı bulabilirsinizExcel: Hata Açık Kullanıcı tanımlı işlevde çalışmaz

tek yer bir makalede çizgilerin bir çift "Developing User-Defined Functions for Excel 2007 and Excel Services" denilen geçerli:

Hata işleme döner hataları #VALUE. UDF kodu tarafından atılan tüm özel durumlar, Excel çalışma sayfasına #VALUE hata olarak döndürülür.

Eğer hata bindirme "üzerindeki tüm hataları sonu" ve VBA çalışma zamanı hatası iletişim görmek asla ** kodunuzu tek adıma ayarlanmış olsa bile - Excel sessizce gitti ne söylemeden yürütme terk yanlış. Elbette bu, hata ayıklamayı olması gerekenden daha zor hale getirir.

On Error ile ilgili bazı olası geçici çözümler var, ancak kodun yalnızca bir hatanın nerede bulunduğunu öğrenmek için dağılmasını istemiyorum.

Break On Error işini normal yapacak olan gözden kaçan bir Excel/VBA seçeneği var mı? Bir hücreden aradığında ben bir kesme noktası ayarlamak veya herhangi olmadığını

cevap

2

farkındayım bir Stop deyimini kullanmak ayıklayıcıya almak için ** tek yolu Excel 2003

edilir kullanıyorum Özel olarak On Error'dan başka bir şey istediğinde bunu duymaktan hoşlanıyorum ama korkarım ki bu benim bilgimin tek seçeneğidir.

Hata ayıklama yaparken On Error Goto ErrorHandler'u kullanabilirsiniz (ve diğer zamanlarda varsayılan olarak On Error Goto 0'u almak için bunu yazın). ErrorHandler çok fazla kodunuzu kalabalık etmez böylece hatlarının sadece bir çift var olabilir: her zaman

ErrorHandler: 
    MsgBox Err.Number & vbCrLf & Err.Source & vbCrLf & Err.Description 
    Resume 

Resume üzerinde bir kesme noktası ile atlama üzerine hata neden olan açıklamaya geri size rehberlik - ve sonsuz bir hata işleme döngüsünden kaçının.

2

En iyi yöntem, Stop başvuru ve Resume ile On Error GoTo ErrorHandler kullanmak olacaktır.

UDF'ler (bu eğer art arda Esc isabet olmuyorsa) neredeyse sürekli çalışacak şekilde değil kodunuzu eklenti içinde resume ile sonsuz bir döngüye Yani

almak için dikkatli olmak gerekiyor: On Error GoTo ErrorHandler sizin fonksiyonu ve sağ başlangıcında yakın End Function önce sonundaki:

Exit Function 
ErrorHandler: 
MsgBox Err.Number & vbCrLf & Err.Source & vbCrLf & Err.Description 
Stop 
Resume 

Exit Function durur bu kodun normal çalışma çalışan. Bir hatayla karşılaşırsanız, ayrıntıları içeren bir mesaj kutusu açılır, kod kırılır (Stop nedeniyle) ve hata ayıklama araç çubuğundaki sonraki satır komutunu kullanarak kodunuza geri dönebilirsiniz (resume bildirimi aracılığıyla geri adım atma). .

Tabii ki UDF'nizden memnun olduğunuzda On Error GoTo ErrorHandler hattını yorumlamayı da unutmayın.

İlgili konular