Bu siteye giriş yaparak Çerez kullanımını kabul etmiş oluyorsunuz. İşbu sitede; çerez olarak, sadece son giriş tarihiniz ve eğer üye olursanız oturum statünüz tutulacaktır. Bunlar dışında başka hiçbir bilgi tutulmamaktadır. Çerezler için detaylı bilgi için buraya tıklayınız.
ANLADIM

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.

Baş
Udemy
Konular
Son
Konular
OzelOlaylar
Olaylar
VBAMakro
VBAMakroOlaylar6

Özel Olaylar

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. 

Kendi Classlarınıza ait olaylar

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. 

Diğer özel olaylar

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.

QueryTable Event örneği

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:

  • Öncelikle yeni bir dosya açın
  • VBE'ye geçip bir class modül ekleyin ve propertiesten buna myClass adını verin.
  • Sonra aşağıdaki kodu bu modüle yapıştırın.
  • Sonrasında dosyanıza bir veri bağlantısı ekleyin(Access, Excel, Oracle, SQL Server v.s olabilir). Örnek olması adına benim sitemdeki http://www.excelinefendisi.com/Ornek_dosyalar/pivotdata.xlsx dosyasından herhangi bir sayfayı ekleyebilirsiniz.(Veri tabanı bağlantılarına aşina değilseniz önce buraya bakın)
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
  • Son olarak ThisWorkbook modülünün içine de şunları yazın.
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.

TEST SORULARI

Son Sorumuz şuymuş:Bir metindeki tüm noktaları yoketmek istiyorsunuz. Hangi fonksiyonu kullanırdınız?
Soru:

A şıkkı:

B şıkkı:

C şıkkı:

D şıkkı:

Doğru Cevap Etiketler

İlişkili konuyu seç

91803

Label
* Sorulara verilen yanlış cevaplardaki esprili yorumlarım için hoşgörünüze sığınıyorum.
* Test ve Ödevlerdeki bazı detaylar burada anlatılmamış olabilir. Bunları kendiniz araştırıp bulmalısınız.
* Birden çok konuya ait içeriği olan ödevler var. Algoritmik açıdan bakıldığında o an en uygun konuya adreslenmiştir.
Dikkat! Bir soruya cevap verdikten sonra geri dönemezsiniz.
0
0
0
0

SoruID:... Şu an için bu konu için soru bulunmamaktadır. İletişim menüsünden örnek sorularınızı bana iletebilirsiniz.




ÖDEVLER

0
0
ÖdevNo:... Şu an için bu konu için ödev bulunmamaktadır. İletişim menüsünden örnek ödev sorularını bana iletebilirsin.
Çözüme bakın(Başka türlü de çözülebilir tabi, bu benim çözümüm.)




=YORUMLAR ve SORULAR=


DEVİR UYARISI

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.