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ükseltDaha 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 |