Excel VBA Hata İşleme, bir uygulama çalışırken oluşan hataları işlemek için yazılmış koda atıfta bulunur. Excel VBA'da hata işleme, VBA kodunun yürütülmesi sırasında oluşabilecek hataları öngörmek ve yönetmek için kullanılan bir programlama tekniğidir. VBA makrolarınızın sorunsuz çalışmasını sağlamaya yardımcı olur, kullanıcılara değerli geri bildirimler sağlar ve Excel uygulamalarınızda beklenmeyen çökmeleri veya hataları önler. Aşağıdaki örneği ele alın:

Bu örnek, kodun çalışmasını durdurmadan hatanın nasıl ele alınacağını aşağıdaki ileti kutusunda görüntüleyerek gösterir.

- Beklenmeyen hataları zarif bir şekilde yönetmek için kodunuza her zaman VBA hata işleme özelliğini ekleyin.
- Doğru hata yönetimi, VBA kodunun düzgün çalışmasını sağlar ve programın aniden sonlanmasını önler.
- Hata kodunu tanımlamak için “Err.Number”ı, kullanıcılara hata mesajlarını görüntülemek için “Err.Description”ı kullanın.
- Özellikle harici veri kaynakları veya veritabanı bağlantılarıyla çalışırken hata yönetimi çok önemlidir.
Açıklama
Excel'de hata işleme VBA, kod yürütme sırasında hataları öngörür, algılar ve çözer. VBA'da üç tür hata vardır: Sözdizimi, Derleme ve Çalışma Zamanı. Sözdizimi hataları, VBA kod sözdizimini kodda derlediğinde oluşan Derleme hatalarında bir sorun bulduğunda oluşur. Derleme hataları, VBA kodu derlerken oluşur. Bir hatayı işleyecek belirli bir kod yoksa, beklenmeyen bir hata olarak kabul edilir. Bu beklenmeyen hataları işlemek için VBA hata işleme ifadeleri kullanılır. VBA Hata işleme 3022, Microsoft Access'te tabloda istenen değişikliklerin birincil anahtarı veya benzersiz dizini ihlal edeceği için başarısız olduğunu kullanıcıya bildiren bir form hatasıdır.
VBA hata işleme süreci, herhangi bir hata oluşmadan önce kod yazarken gerçekleşir. VBA'da hataları işlemek için birkaç 'On Error' ifadesi kullanılabilir.
VBA Kodundaki Hatalar Nasıl Ele Alınır?
Excel VBA'da hata yönetimi aşağıdaki adımları izleyerek yapılabilir:
Adım 1: Araç çubuğundaki “ Geliştirici ” bölümüne gidin ve “ Visual Basic ” seçeneğine tıklayın. Şimdi, işlevler ve alt prosedürler eklemek için VBA Düzenleyicisi açılır. Ardından, yeni bir modül veya boş sayfa oluşturmak için “Ekle” ve “Modül” düğmelerine tıklayın.


Adım 2: Sıfıra bölme hatasını işleyen bir alt prosedür bildirin.

Adım 3: Koda başlamadan önce Hata koşulu olan Errorhandler'ı bildirin.

Adım 4: Bölme işlemini gerçekleştirmek için üç değişken tanımlayın: temettü, bölen ve bölüm.

Adım 5: Kullanıcıdan temettü ve bölen değerlerini alın.

Adım 6: Bölüneni ve böleni böl ve değeri sonuç değişkeninde sakla.

Adım 7: Kullanıcının bölen olarak 0 girmesi durumunda oluşabilecek hatalarla başa çıkmak için Errorhandler koşulunu tanımlarız.

Kod:
Sub DivideNumbers()
On Error GoTo ErrorHandler
Dim dividend As Double
Dim divisor As Double
Dim result As Double
dividend = InputBox(“Enter the dividend:”)
divisor = InputBox(“Enter the divisor:”)
result = dividend / divisor
MsgBox “The result is: ” & result
Exit Sub
ErrorHandler:
MsgBox “An error has occurred: ” & Err.Description
Err.Clear
End Sub
Adım 8: İki sayıyı bölmek için kodu çalıştırın. Çıktı aşağıda gösterilmiştir:



VBA'da Hata İşlemenin nasıl çalıştığına bakalım. Daha fazlasına bakalım.
Örnek 1
Değeri girdiğimizde bir öğenin kategorisini bulmak istediğimiz bir tablomuz olduğunu varsayalım. Bu, VBA Excel Vlookup işlevi kullanılarak yapılabilir . VBA'daki Vlookup (Dikey Arama) işlevi belirli bir satırın değerini alır ve aynı satırın ancak farklı bir sütunun başka bir öğesinin değerinin değerini döndürür.

Vlookup'ta aradığımız değer yoksa, bir hata verecektir. Burada, VBA hata işleme Vlookup teknikleriyle nasıl başa çıkılacağını öğreniyoruz.
Adım 1: VLOOKUP fonksiyonunu uygulayacak bir alt rutin bildirmeye başlayın.

Adım 2: Herhangi bir hata durumunda Errorhandler ifadesine geçmek için VBA GoTo ifadesini kullanın .

Adım 3: Arama değerini, tablonun aralığını ve VLookup işlevinin döndürdüğü sonucu depolamak için üç değişken atayın.

Adım 4: Kullanıcıdan arama terimini alın.

Adım 5: Kullanıcıdan gelen değeri kullanarak, dört parametreye ihtiyaç duyan VLookup fonksiyonunu gerçekleştirin:
- Değer
- Tablonun aralığı
- Sütun Numarası
- Yanlış veya Doğru (Tam eşleşme için Yanlış, yaklaşık eşleşme için Doğru)

Daha sonra sonucu yazdırın.
Adım 6: Bir hata olduğunda Errorhandler etiketini bildirin.

Kod:
Sub lookupValue()
On Error GoTo ErrorHandler
Dim lookupValue As String
Dim lookupRange As Range
Dim result As Variant
lookupValue = InputBox(“Enter the lookup value:”)
Set lookupRange = Range(“A2:B10”)
result = WorksheetFunction.VLookup(lookupValue, lookupRange, 2, False)
MsgBox “The result is: ” & result
Exit Sub
ErrorHandler:
Debug.Print “An error has occurred: ” & Err.Description
Err.Clear
End Sub
Adım 5: Kodu çalıştırın ve çıktıyı görüntüleyin:


Hata yönetimi için:


Örnek 2
Sistemimizde bir dosyayı aramamız ve açmamız gereken bir örneği ele alalım. Ancak, dosya yoksa Excel "dosya bulunamadı" hatası verecektir. VBA Hatası işleme dosyası bulunamadı hatasının nasıl ele alınacağını görelim.
Adım 1: Bir Excel dosyasını açmak için bir alt prosedür başlatın.

Adım 2: Kodun ErrorHandler etiketine atlamasını sağlayan bir GoTo ifadesi bildirin.

Adım 3: Bir dize değişkeni tanımlayın ve kullanıcının açmak için verdiği dosya yolunu saklayın.

Adım 4: Kullanıcının verdiği dosyayı açın ve kapatın. Yapılan değişikliklerin kaydedilmemesi için koşulları ayarlayın.

Adım 5: Hata açıklamasıyla ErrorHandler etiketini tanımlayın ve karışıklığı önlemek için önceki hataları temizleyin.

Kod:
Sub OpenFile()
On Error GoTo ErrorHandler
Dim filePath As String
filePath = InputBox(“Enter the file path:”)
Workbooks.Open filePath
ActiveWorkbook.Close SaveChanges:=False
Exit Sub
ErrorHandler:
MsgBox “An error has occurred: ” & Err.Description
Err.Clear
End Sub
Adım 6: Dosya açma kodunu çalıştırın. Çıktı aşağıda gösterilmiştir:

Excel dosyası popu.xlsx'i açar ve kapatır. İhtiyacınız olursa, ona uygulanacak ek işlevler ekleyebilirsiniz.
Hata yönetimi için:


Dikkat Edilmesi Gereken Önemli Noktalar
- Beklenmeyen hataları yönetmek için VBA kodunuza her zaman hata işleme özelliğini ekleyin .
- VBA'nın hatalar oluştuğunda nasıl ele alacağını tanımlamak için "Hata Durumunda" ifadesini kullanın.
- Dosya işleme, veritabanı bağlantıları veya harici veri etkileşimleri gibi kritik işlemlerle ilgili hata yönetimini ekleyin.
- Farklı Excel sürümlerinde değişebileceğinden, yalnızca belirli hata numaralarına güvenmekten kaçının.
- Fark edilmeyebilecek olası sorunları önlemek için “Hata Durumunda Devam Et” seçeneğini kullanırken dikkatli olun.
- Gerekmediğinde hata işlemeyi devre dışı bırakmak ve varsayılan davranışı geri yüklemek için “Hata Durumunda 0'a Git” öğesini kullanın.
- Kritik olmayan bölümler için “On Error Resume Next” seçeneğini kullanmayı düşünün ancak bunu genel olarak kullanmaktan kaçının.
• On Error Resume Next: Hataları yok sayar ve bir sonraki kod satırıyla devam eder. Çoğunlukla döngüde VBA Hata işleme ile uğraşırken yapılır.
• On Error GoTo 0: Hata işlemeyi devre dışı bırakır.
• On Error GoTo [Label]: Bir hata oluştuğunda belirtilen etikete atlar.
• On Error GoTo ErrorHandler: Ortak bir hata işleme alt rutinine (ErrorHandler) atlar.
• Err.Number: Hata numarasını içeren özellik.
• Err.Description: Hata açıklamasını içeren özellik.
• Err.Clear: Geçerli hatayı temizler.
VBA'da 1004 numaralı çalışma zamanı hatası, "Uygulama tanımlı veya Nesne tanımlı hata" olarak bilinir.
• Bir çalışma sayfası veya aralık gibi bir Excel nesnesinde sorun olduğunda oluşur.
• Yaygın nedenler arasında var olmayan veya korunan bir aralığa başvurulması veya bir nesneyle yanlış bir yöntem veya özellik kullanılması yer alır.
• Uygun hata işleme, bu hatanın nedenini teşhis etmeye ve çözmeye yardımcı olabilir.
• Her Zaman Hata İşlemeyi Uygulayın: Beklenmeyen hataları işlemek için VBA kodunuza hata işlemeyi ekleyin.
• Hata Üzerine Git [Etiket] Kullanın: Kodu belirli bir hata işleme rutinine yönlendirmek için “Hata Üzerine Git [Etiket]” öğesini kullanın.
• Anlamlı Mesajlar Sağlayın: Sorun gidermeye yardımcı olmak için net ve açıklayıcı hata mesajları görüntüleyin.
• Kritik İşlemleri Ele Alın : Beklenmeyen çökmeleri önlemek için kritik işlemler etrafında hata işlemeyi kullanın.
• Hata Senaryolarını Test Edin: Geliştirme sırasında hata işleme kodunuzu farklı hata senaryolarıyla test edin.
• “Hata Üzerine Devam Et Sonraki”nden Kaçının: Hataları gizleyebileceği ve hata ayıklamayı zorlaştırabileceği için “Hata Üzerine Devam Et Sonraki” öğesini nadiren kullanın.
• Hataları Temizle: İstenmeyen hata yayılmasını önlemek için işleme sonrasında hataları temizlemek için “Err.Clear” öğesini kullanın.
• Günlüğe Kaydetmeyi Göz Önünde Bulundurun: Uygulamadaki sorunları izlemek ve analiz etmek için hataları günlüğe kaydetmeyi göz önünde bulundurun.
