VBA On Error Resume Next Statement kullanarak hatalar nasıl yok sayılır?

Hata Devam Etme Durumunda Excel VBA Sonraki

VBA On Error Resume Next , bir hata işleyici ifadesidir. Hata, kod çalıştırılırken meydana gelirse, hata mesajını görmezden gelerek sonraki kod satırına devam etmek için hata göstermek yerine bu ifadeyi kullanabilirsiniz.

Excel VBA'da düzenli olarak kod yazanlar, yetkin kodlar yazdıktan sonra bile hata alabileceklerini bilirler, ancak bu hatayı görmezden gelmek ve sonraki kod satırlarıyla çalışmaya devam etmek isterler. Hata mesajı almanın tipik bir örneği, DÜŞEYARA çalışma sayfası işlevinin tablo dizisindeki arama değerini bulamamasıdır. # N / A hatası döndürmez; bunun yerine, hatayı atacaktır. "Çalışma sayfası işlevi sınıfının DÜŞEYARA özelliği alınamıyor."

Bu hatayı neden aldığımızı bilmiyorsanız, hatayı düzeltmek çok zordur. VBA'da, "Bundan Sonra Hata Devam Ettirme " adlı bir özelliğimiz var .

VBA'da Hata Devam Etme Sırasında Ne Yapar?

Kodlayıcı olarak belli alanlar vardır. Bunun bir hata mesajı vereceğinden emin olacağız, ancak kodu incelemeye devam etmek için bu hatayı görmezden gelmemiz gerekiyor, bu nedenle bu hatayı nasıl yok sayacağımız herkesin ortak şüphesidir.

VBA On Error Resume Next ifadesini kullanarak, hatayı görmezden gelebilir ve bir sonraki kod satırına devam edebiliriz.

Örnek 1

Pek çok çalışma sayfanız olduğunu ve bazılarını VBA projesinin bir parçası olarak sakladığınızı varsayalım. Örneğin, çalışma sayfamda bulunan çalışma sayfaları aşağıdadır.

"Satış ve" Kar "sayfalarını gizlemek için kodlar yazdım ve aşağıda kod var.

Kod:

Sub On_Error () Çalışma Sayfaları ("Satış"). Visible = xlVeryHidden Çalışma Sayfaları ("Kar 2019"). Visible = xlVeryHidden Çalışma Sayfaları ("Kar"). Visible = xlVeryHidden End Sub

Şimdi F8 tuşunu kullanarak kodu satır satır çalıştırmaya başlayacağım .

Ben basarsanız F8 tuşunu bir kez daha, bu adlandırılmış sayfasını gizler “ Satış ”.

Şimdi F8 tuşuna bir kez daha basın ve ne olacağını görün.

Geçerli kod satırı aşağıda belirtildiği için "Alt simge aralık dışı" hatası aldık.

Çalışma sayfaları ("Kar 2019"). Görünür = xlVeryHidden

" Kar 2019 " adlı çalışma sayfasını gizlemeye çalışıyor , ancak " Kar 2019 " adında bir çalışma sayfası yok.

Bu durumlarda, çalışma sayfası çalışma kitabında yoksa, hatayı göz ardı etmemiz ve "Alt simge aralık dışı" hatasını yok sayarak kodu çalıştırmaya devam etmemiz gerekir.

Koddaki sonraki satırda

Çalışma sayfaları ("Kar"). Visible = xlVeryHidden

Bu çalışma sayfası bu çalışma kitabında var, bu nedenle hatayı görmezden gelmeden bu kod satırına geçemeyiz.

Bu hatayı görmezden gelmek için "Hata Olduğunda Devam Et" ifadesini eklememiz gerekir.

Kod:

Sub On_Error () Hata Olduğunda Sonraki Çalışma Sayfalarını Devam Ettir ("Satış"). Visible = xlVeryHidden Çalışma Sayfaları ("Kar 2019"). Visible = xlVeryHidden Çalışma Sayfaları ("Kar"). Visible = xlVeryHidden End Sub

Yukarıda görebileceğiniz gibi, herhangi bir satır başlamadan önce ifadeyi kodun üstüne ekledim. Şimdi kodu çalıştırın ve ne olacağını görün.

Şimdi daha önce hata verilen satırdayım, F8 tuşuna basın ve ne olacağını görün.

En üstte eklediğimiz “On Error Resume Next” VBA ifadesi nedeniyle herhangi bir hata göstermeden bir sonraki kod satırına atladım.

Örnek 2

Şimdi bu ifadeyi bir örnekle daha nasıl kullanacağımızı göreceğiz. Bu örnek için aşağıdaki veri yapısına bakın.

İlk tablonun üzerinde, ikinci tabloda Emp Adı ve maaş ayrıntılarının olduğu iki tablomuz var ve sadece Emp Adı var, bu nedenle DÜŞEYARA kullanarak maaş ayrıntılarını sol taraftaki tablodan almamız gerekiyor.

Ayrıntıları almak için yazdığım kod aşağıdadır.

Kod:

Alt On_Error1 () Dim k As Long For k = 2 to 8 Cell (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0) Next k End Alt

Şimdi kodu satır satır çalıştırın ve ne olduğunu görün.

İlk hücre kodunu çalıştırdıktan sonra, ilk çalışan için sonucu aldık. Aynısını ikinci çalışan için de tekrarlayın.

Bu sefer hata mesajını aldık. Tablodaki ikinci çalışan adına bakalım.

İkinci çalışan adı "Gayathri" dir, ancak bu ad ilk tabloda yoktur, bu nedenle VBA DÜŞEYARA işlevi, DÜŞEYARA, masa; bunun yerine yukarıdaki hata mesajını verir.

Amacımız, çalışan adı tabloda bulunmazsa, o çalışan için boş bir hücreye ihtiyacımız var ve hatayı görmezden gelip kalan isimler için sonuç veriyoruz.

Döngünün içine “On Error Resume Next” ifadesini eklememiz gerekiyor.

Kod:

Sub On_Error1 () Dim k As Long For k = 2 - 8 Hatada Sonraki Hücreleri Devam Ettir (k, 6) .Value = WorksheetFunction.VLookup (Hücreler (k, 5), Aralık ("A: B"), 2, 0 ) Next k End Sub

Şimdi kodu çalıştırın ve sonucu görün.

Listede " Gayathri & Karanveer " adlı iki çalışan adı yok, bu nedenle bu satır kodları bir hatayla karşılaşmış olmalı, çünkü "Bundan Sonra Hata Devam Ettirdiğinde " hata işleyici ifadesi ekledik , bu kod satırını yok saydı ve kaldığı yerden devam etti. bir sonraki çalışan için.

Burada Hatırlanması Gereken Şeyler

  • "On Error Resume Next", bilinen hatayı göz ardı etmemiz gereken hata işleyici ifadesidir.
  • Hata mesajını yalnızca belirli bir kod kümesi için yok saymak istiyorsanız, " Hata Durumunda GoTo 0 " ifadesini ekleyerek hata durumunda sonraki ifadeyi devam ettirin .

Ilginç makaleler...