VBA Hatasında - En İyi Uygulamaların İşlenmesinde Hata

VBA Hataları Hile Sayfası

Hatalar

AçıklamaVBA KoduHatada - Kodu durdur ve hatayı görüntüleHatada 0 GitHatada - Hatayı atla ve çalıştırmaya devam etHatada Devam Et SonrakiHatada - Bir kod satırına gidin [Etiket]Hatada [Etiket] GitTemizler (Sıfırlar) HatasıHatada Git -1Hata numarasını gösterMsgBox Hata NumarasıHata Açıklamasını GösterMsgBox Err.AçıklamaKendi hatasını oluşturma işleviHata.Yükselt

Daha fazla VBA “Hile Sayfaları” ve ücretsiz PDF İndirmeleri görün

VBA Hata İşleme

VBA Hata İşleme VBA Çalışma Zamanı Hatalarını tahmin etme, algılama ve çözme sürecini ifade eder. VBA Hata İşleme işlemi, kod yazarken herhangi bir hata oluşmadan önce gerçekleşir.

VBA Çalışma Zamanı Hataları kod yürütme sırasında oluşan hatalardır. Çalışma zamanı hatalarına örnekler:

  • Var olmayan bir çalışma kitabına, çalışma sayfasına veya başka bir nesneye başvurma
  • Geçersiz veri ör. hata içeren bir Excel hücresine başvurma
  • sıfıra bölmeye çalışmak

Hata Bildiriminde VBA

Çoğu VBA hata işleme, Hata Bildiriminde. On Error ifadesi, VBA'ya bir hatayla karşılaşırsa ne yapacağını söyler. Üç vardır Hata Bildirimleri Üzerine:

  • Hatada GoTo 0
  • Hatada Devam Et Sonraki
  • Hatada Git Hat

Hatada GoTo 0

Hatada GoTo 0 VBA'nın varsayılan ayarıdır. Aşağıdaki kod satırını ekleyerek bu varsayılan ayarı geri yükleyebilirsiniz:

1 Hatada GoTo 0

ile bir hata oluştuğunda Hatada GoTo 0, VBA kod yürütmeyi durduracak ve standart hata mesaj kutusunu görüntüleyecektir.

Genellikle bir ekleyeceksin Hatada GoTo 0 ekledikten sonra Hatada Devam Et Sonraki hata işleme (sonraki bölüm):

123456789 Alt ErrorGoTo0()Hatada Devam Et SonrakiActiveSheet.Shapes("Start_Button").SilHatada GoTo 0'Daha Fazla Kod ÇalıştırınAlt Bitiş

Hatada Devam Et Sonraki

Hatada Devam Et Sonraki VBA'ya hata içeren tüm kod satırlarını atlamasını ve bir sonraki satıra geçmesini söyler.

1 Hatada Devam Et Sonraki

Not: Hatada Devam Et Sonraki bir hatayı düzeltmez veya başka bir şekilde çözmez. VBA'ya hatayı içeren kod satırı yokmuş gibi devam etmesini söyler. yanlış kullanımı Hatada Devam Et Sonraki istenmeyen sonuçlara yol açabilir.

Kullanmak için harika bir zaman Hatada Devam Et Sonraki var olan veya olmayan nesnelerle çalışırken. Örneğin, bir şekli silecek bir kod yazmak istiyorsunuz, ancak kodu şekil zaten silinmişken çalıştırırsanız, VBA bir hata verecektir. Bunun yerine kullanabilirsiniz Hatada Devam Et Sonraki VBA'ya şekli varsa silmesini söylemek için.

123 Hatada Devam Et SonrakiActiveSheet.Shapes("Start_Button").SilHatada GoTo 0

Eklediğimiz not Hatada GoTo 0 potansiyel hatayı içeren kod satırından sonra. Bu, hata işlemeyi sıfırlar.

Bir sonraki bölümde, kullanarak bir hata oluşup oluşmadığını nasıl test edeceğinizi göstereceğiz. Hata Numarası, size daha gelişmiş hata işleme seçenekleri sunar…

Err.Number, Err.Clear ve Hataları Yakalama

Sadece hata içeren bir satırı atlamak yerine şunu kullanarak hatayı yakalayabiliriz. Hatada Devam Et Sonraki ve Hata Numarası.

Hata Numarası algılanan hatanın türüne karşılık gelen bir hata numarası döndürür. Hata yoksa, Hata Numarası = 0.

Örneğin, oluşan hata şu olduğundan, bu prosedür “11” değerini döndürür. Çalışma zamanı hatası '11'.

1234567 Alt ErrorNumber_ex()Hatada Devam Et SonrakiActiveCell.Value = 2 / 0MsgBox Hata NumarasıAlt Bitiş

Err.Number ile Hata İşleme

gerçek gücü Hata Numarası bir hatanın oluşup oluşmadığını tespit etme yeteneğinde yatar (Hata Numarası 0). Aşağıdaki örnekte, Err.Number kullanarak bir sayfanın olup olmadığını test edecek bir fonksiyon oluşturduk.

12345678910111213141516171819 Alt TestWS()MsgBox DoesWSExist("test")Alt Bitişİşlev DoesWSExist(wsName As String) Boolean OlarakDim ws As Çalışma SayfasıHatada Devam Et Sonrakiws = Sayfaları ayarla(wsName)'Hata WS Mevcut DeğilseHata Numarası 0 iseDoesWSExist = YanlışBaşkaDoesWSExist = DoğruBitirHatada Git -1Bitiş İşlevi

Not: Bir ekledik Hatada Git -1 Err.Number'ı 0'a sıfırlayan sona kadar (aşağıdaki iki bölüme bakın).

İle birlikte Hatada Devam Et Sonraki ve Hata Numarası, çoğaltabilirsiniz “Dene” ve “Yakala” diğer programlama dillerinin işlevselliği.

Hatada Git Hat

Hatada Git Hat bir hatayla karşılaşıldığında VBA'ya etiketli bir kod satırına "gitmesini" söyler. Go To ifadesini şu şekilde beyan edersiniz (burada errHandler, gidilecek satır etiketidir):

1 Hatada GoTo errHandler

ve şöyle bir satır etiketi oluşturun:

1 errHandler:

Not: Bu, normal bir VBA GoTo Bildirimi ile kullanacağınız etiketin aynısıdır.

Aşağıda kullanarak göstereceğiz Hatada Git Hat Bir prosedürden çıkmak için

Hatada Çıkış Sub

Bir hata oluştuğunda bir alt bölümden çıkmak için Hata Gitme Hattında'yı kullanabilirsiniz.

Bunu, hata işleyici satır etiketini prosedürünüzün sonuna yerleştirerek yapabilirsiniz:

12345678 Alt ErrGoToEnd()GoTo endProc Hatasında'Bazı KodlarendProc:Alt Bitiş

veya Exit Sub komutunu kullanarak:

123456789101112131415 Alt ErrGoToEnd()GoTo endProc Hatasında'Bazı KodlarGoTo atlaÇıkışendProc:Alt ÇıkışatlamaÇıkış:'Biraz Daha KodAlt Bitiş

Err.Clear, Error GoTo -1'de ve Err.Number'ı Sıfırlama

Bir hata işlendikten sonra, gelecekte hata işleme ile ilgili sorunları önlemek için genellikle hatayı temizlemelisiniz.

Bir hata oluştuktan sonra, ikisi birden Hata.Temizle ve Hatada Git -1 sıfırlamak için kullanılabilir Hata Numarası 0'a. Ancak çok önemli bir fark var: Hata.Temizle gerçek hatayı sıfırlamaz, yalnızca Hata Numarası.

Bu ne anlama geliyor? kullanmaHata.Temizle, hata işleme ayarını değiştiremezsiniz. Farkı görmek için bu kodu test edin ve değiştirin Hatada Git -1 ile birlikte Hata.Temizle:

123456789101112131415161718192021 Alt HataÖrnekleri()Hatada GoTo errHandler:'"Uygulama tanımlı" hatasıHata (13)Alt ÇıkışerrHandler:' Hatayı TemizleHatada Git -1Hata GoTo errHandler2'de:"Tür uyuşmazlığı" hatasıHata (1034)Alt ÇıkışerrHandler2:Debug.Print Err.DescriptionAlt Bitiş

Genellikle, her zaman kullanmanızı öneririm Hatada Git -1kullanmak için iyi bir nedeniniz yoksa Hata.Temizle Bunun yerine.

VBA Hatasında MsgBox

Ayrıca hata durumunda bir Mesaj Kutusu görüntülemek isteyebilirsiniz. Bu örnek, hatanın oluştuğu yere bağlı olarak farklı mesaj kutuları gösterecektir:

12345678910111213141516171819202122232425262728 Alt ErrorMessageEx()Dize olarak Dim errMsgHatada GoTo errHandler'Aşama 1errMsg = "Kopyala ve Yapıştır aşamasında bir hata oluştu."'Hata Yükselt (11)'2. aşamaerrMsg = "Veri Doğrulama aşamasında bir hata oluştu."'Hata Yükselt (11)'Sahne 3errMsg = "K&B Oluşturma ve Kopyalama aşamasında bir hata oluştu."Hata Kaldır (11)4. AşamaerrMsg = "Kurulum Sayfasında İçe Aktarma işlemi günlüğe kaydedilmeye çalışılırken bir hata oluştu"'Hata Yükselt (11)Sona GitProcerrHandler:MsgBox errMsgendProc:Alt Bitiş

Burada Err.Raise(11)'i gerçek kodunuzla değiştirirsiniz.

VBA Hatası

Hataları işlemenin başka bir yolu da onları VBA IsError İşlevi ile test etmektir. IsError işlevi, bir hata oluşursa DOĞRU veya YANLIŞ döndürerek bir ifadeyi hatalar için test eder.

123 Alt IsErrorEx()MsgBox IsError(Range("a7").Value)Alt Bitiş

Hata VBA ise

Excel IfError İşlevi ile VBA'daki hataları da işleyebilirsiniz. IfError İşlevine, aşağıdakiler kullanılarak erişilmelidir: Çalışma SayfasıFonksiyon Sınıfı:

1234567 Alt IfErrorEx()Dim n Uzunn = WorksheetFunction.IfError(Range("a10").Value, 0)Mesaj Kutusu nAlt Bitiş

Bu, A10 Aralığının değerini verir, değer bir hataysa, bunun yerine 0 verir.

VBA Hata Türleri

Çalışma Zamanı Hataları

Yukarıda belirtildiği gibi:

VBA Çalışma Zamanı Hataları kod yürütme sırasında oluşan hatalardır. Çalışma zamanı hatalarına örnekler:

  • Var olmayan bir çalışma kitabına, çalışma sayfasına veya başka bir nesneye başvurma
  • Geçersiz veri ör. hata içeren bir Excel hücresine başvurma
  • sıfıra bölmeye çalışmak

Yukarıda tartışılan yöntemleri kullanarak çalışma zamanı hatalarını "hata işleyebilirsiniz".

Sözdizimi Hataları

VBA Sözdizimi Hataları kod yazma hatalarıdır. Sözdizimi hatalarına örnekler:

  • yazım hatası
  • Eksik veya yanlış noktalama işaretleri

VBA Düzenleyici, kırmızı vurgulama ile birçok sözdizimi hatasını tanımlar:

VBA Düzenleyici ayrıca “Otomatik Sözdizimi Kontrolü” seçeneğine de sahiptir:

Bu işaretlendiğinde, VBA Düzenleyici, bir kod satırı girdikten sonra sözdizimi hataları konusunda sizi uyaran bir mesaj kutusu oluşturacaktır:

Şahsen bunu son derece sinir bozucu buluyorum ve özelliği devre dışı bırakıyorum.

Derleme Hataları

Bir prosedürü çalıştırmaya çalışmadan önce, VBA prosedürü “derleyecektir”. Derleme, programı kaynak koddan (görebileceğiniz) yürütülebilir forma (göremezsiniz) dönüştürür.

VBA Derleme Hataları kodun derlenmesini engelleyen hatalardır.

Derleme hatasına iyi bir örnek, eksik bir değişken bildirimidir:

Diğer örnekler şunları içerir:

  • İçin olmadan Sonraki
  • Seçme olmadan Seçimi Bitir
  • Eğer olmadan Bitir
  • aramak prosedür bu yok

Sözdizimi Hataları (önceki bölüm), Derleme Hatalarının bir alt kümesidir.

Hata Ayıklama > Derleme

Bir Prosedür çalıştırmayı denediğinizde derleme hataları görünecektir. Ancak ideal olarak, prosedürü çalıştırmayı denemeden önce derleme hatalarını tanımlarsınız.

Bunu, projeyi önceden derleyerek yapabilirsiniz. Bunu yapmak için şuraya gidin: Hata Ayıklama > VBA Projesini Derleme.

Derleyici ilk hataya "gidecektir". Bu hatayı düzelttikten sonra projeyi tekrar derleyin. Tüm hatalar giderilene kadar tekrarlayın.

Tüm hataların düzeltildiğini söyleyebilirsiniz çünkü VBA Projesini Derleyin grileşecek:

Taşma Hatası

NS VBA Taşma Hatası çok büyük bir değişkene bir değer koymaya çalıştığınızda oluşur. Örneğin, Tamsayı Değişkenleri yalnızca -32.768 ile 32.768 arasındaki değerleri içerebilir. Daha büyük bir değer girerseniz, bir Taşma hatası alırsınız:

Bunun yerine, Uzun Değişken daha büyük sayıyı saklamak için

Diğer VBA Hata Terimleri

VBA Yakalama Hatası

Diğer programlama dillerinden farklı olarak VBA'da Yakalama Bildirimi. Ancak, kullanarak bir Yakalama İfadesini çoğaltabilirsiniz. Hatada Devam Et Sonraki ve Hata Numarası 0 ise. Bu, yukarıda Err.Number ile Hata İşleme bölümünde ele alınmıştır.

VBA Yoksayma Hatası

VBA'daki hataları yok saymak için Hatada Devam Et Sonraki Beyan:

1 Hatada Devam Et Sonraki

Ancak, yukarıda belirtildiği gibi, bir hatayı düzeltmediği için bu ifadeyi kullanırken dikkatli olmalısınız, sadece hatayı içeren kod satırını yok sayar.

VBA Atma Hatası / Err.Raise

VBA'daki bir hatayı geçmek için, Hata.Yükselt yöntem.

Bu kod satırı, '13' Çalışma Zamanı hatasını yükseltir: Tür uyuşmazlığı:

1 Hata Kaldır (13)

VBA Hata Yakalama

VBA Hata Yakalama VBA Hata İşleme için başka bir terimdir.

VBA Hata Mesajı

A VBA Hata Mesajı buna benzer:

'Hata Ayıkla'yı tıkladığınızda, hatayı veren kod satırını göreceksiniz:

Bir Döngüde VBA Hatası İşleme

Bir Döngü içinde hata işlemenin en iyi yolu kullanmaktır. Hatada Devam Et Sonraki ile birlikte Hata Numarası Bir hatanın oluşup oluşmadığını tespit etmek için (Kullanmayı unutmayın) Hata.Temizle her oluşumdan sonra hatayı temizlemek için).

Aşağıdaki örnek iki sayıyı (Sütun A'yı Sütun B'ye bölecek) ve sonucu Sütun C'ye çıkaracaktır. Bir hata varsa, sonuç 0 olacaktır.

12345678910111213141516 alt test()Aralık olarak hücreyi karartHatada Devam Et SonrakiAralıktaki Her Hücre İçin("a1:a10")'Hücre Değerini Ayarlacell.Offset(0, 2).Value = cell.Value / cell.Offset(0, 1).Value'Cell.Value Hata ise Varsayılan 0'dırHata Numarası 0 isecell.Offset(0, 2).Value = 0Hata.TemizleBitirSonrakiAlt Bitiş

Access'te VBA Hatası İşleme

Yukarıdaki örneklerin tümü, Access VBA'da Excel VBA'dakiyle tamamen aynı şekilde çalışır.

123456789101112131415161718 İşlev DelRecord(Form Olarak frm)'Bu işlev, bir tablodaki bir kaydı bir formdan silmek için kullanılır.Hatada GoTo sona eriyorfrm ile.NewRecord ise.Geri almaÇıkış FonksiyonuBitirİle bitmekfrm.RecordsetClone ile.Yer imi = frm.Yer imi.Silmekfrm.Requeryİle bitmekÇıkış Fonksiyonubitirme:SonBitiş İşlevi

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave