DUYURULAR
Yeni eklenen ve/veya güncellenen sayfaları görmek için buraya tıklayınız.
Güncel ödev ve test listesini görmek için buraya tıklayınız.
Sitede yapılan iyileştirmeAer ve hata düzeltmelerine ait tüm bilgilendirmeleri görmek içinburaya tıklayınız.
Bundan önceki bölümlerde Excel'in kendi nesnelerinin eventlerinin otomatik olarak kod pencresine eklendiğini (ve bunların değiştirilmemesi gerektiğini) söylemiştik. Bu bölümde kendi nesnelerimize(classlarınıza) ait eventleri nasıl yaratırız bunu göreceğiz. Bunun için Class kavramını biraz biliyor olmanız gerekiyor. Bilmeyenler ön bilgiyi buradan edinebilirler.
Bu bölümü yapmaya başladığımda nerden başlayacağıma bi türlü karar veremedim, zira Class konusuna bayağı bir girmek gerekiyordu. Şuan ise sayfaları sırayla hazırladığım için ve henüz Class konusuna girmediğim için biraz anlamsız geldi. O yüzden bu konuyu üstteki paragrafta belirttiğim linke bırakıyorum.
Her ne kadar özel olay olmasa da farklı tanımlama ve erişim şekilleri itibarıyle klasik olaylardan farklı oldukları için WithEvent deyimi ile tanımlanan olayları da özel olay gibi düşünebiliriz. Bundan önce Grafik ve Application için bunları nasıl yazdığımızı görmüştük. Bu tür özel olayları başka nesneler için de kullanabiliyoruz. Tüm kullanılabilir nesnelerin listesini aşağıdaki gibi bir değişken tanımlarken As'den sonra boşluk tuşuna basınca görebilirsiniz.
Bunlardan ComboBox, ListBox, Image v.s gibi ActiveX kontrollerine ait eventleri zaten Formlar konusunda ayrıca ele alıyor olacağız. Bu sayfadaki konsepte göre tanımlamanın pek bir esprisi yok bence. O yüzden bunları geçiyoruz.
Biz burada sadece QueryTable nesnesinin eventlerine bakacağız. ActiveX eventlerine ise buradan ulaşabilirsinz.
Aşağıdaki kod ile kullanıcıyı uzun bir refresh işlemi için uyarıyoruz, refresh işlemi bitince de bir mesaj kutusu ile haber veriyoruz.
Örnek dosyayı buradan indirebilirsiniz. Aşamalarımız şöyle:
Private WithEvents myQT As QueryTable Private Sub Class_Initialize() Set myQT = ActiveSheet.ListObjects(1).QueryTable End Sub Private Sub myQT_AfterRefresh(ByVal Success As Boolean) If Success = True Then MsgBox "refresh işlemi bitti" Else MsgBox "refresh sırasında bir hata oluştu" End If End Sub Private Sub myQT_BeforeRefresh(Cancel As Boolean) cevap = MsgBox("uzun sürecek, iptal edeyim mi", vbYesNo) If cevap = vbYes Then Cancel = True MsgBox "iptal edildi" End If End Sub
Dim myClassNesnesi As myClass Private Sub Workbook_Open() Set myClassNesnesi = New myClass End Sub
Bu kadar basit. Şimdi dosyanızı kaydedip kapatın ve tekrar açın, sonra da data üzerinde bir yere gelip, sağ tıklayıp Refresh diyin. Aşağıdaki mesajı görmeniz lazım.
Kodun çalışma prensibi şöyle:
Bir class modülümüz var. Dosya açılır açılmaz bu classtan bir nesne yaratılıyor. Bu nesne yaratılınca class'ın Initialize eventi devreye giriyor ve bu sefer de myQT nesnesine sayfadaki 1 indexli QueryTable atanıyor. Sonrasındaki refresh işlemleri ise aşikar.
Herkese merhaba. Hosting maliyetlerinin aşırı artması yüzünden sitemi yakın zamanda(en geç Mayıs 2023) kapatmaya karar vermiştim. Ancak, siteyi yakından takip eden bir arkadaş siteyi devralmak istemiştir. Siteyi, Mayıs ayında kendisine devir etmeye karar verdim. Üyelik bilgilerini bana güvenerek girdiğiniz için, hepsini silmiş bulunuyorum, yani mail adreslerinizi kimseyle paylaşmamış olacağım. Bilginizi rica ederim.