Class Module Nedir ve Neden İhtiyaç Duyulur?

Bu makalemizde Excel VBA (Macro) içerisindeki Insert sekmesinde bulunan ve standart Excel kullanıcıları için onu boşver bir işe yaramıyor özelliğine sahip Class Module nesnesini tanıyor olacağız. (“Eğer Macro Hakkında Çok Bilgimiz Yoksa önce bu makaleyi okuyalım yada Excel VBA bölümümüzü İnceleyelim”)

Öncelikle sınıf modül nedir ne işe yarar sorusunu standart ve anlamsız bir örnekle cevaplayalım. 🙂

Üniversitelerimizde son kullanma tarihi geçmiş hocalarımız bu konuyu şöyle açıklar ;

Arkadaşlar hepimiz insanız, peki aranızda adı insan olan var mı?

Öğrencilik hayatının başındaki genç neferler bu örnekle şoka uğrasa da örnek gayet açık. Hepimiz insanız fakat adımız kişisel olarak değişiklik gösterir. İşte Sınıf modülleri tüm insan tanımını kendi içinde tutar örneğin 5 er parmaklı 2 el ve ayaklara sahibiz ve her parmağın ayrı özellikleri var, dünya bir paket program olsa ve bizde bunu yazıyor olsak her insan için bu parmakları ve diğer bütün insancıl özellikleri (Vicdan gibi) tekrar tekrar tanımlamamız gerekli bu da programımızı şişirir ve performansı düşürür. İşte bu noktada nesne yönelimli programlama dilleri ve sınıf modüller girer ve biz tüm insanlarda ortak bulunan özellikleri bir modül içinde bir nesne olarak tanımlarız.

Daha sonra yeni bir insan yaratıldığında bunun adının Ufuk olduğunu ve bunun insan sınıfının bir üyesi olduğunu söylediğimizde Ufuk İnsan sınıfının bütün ortak özelliklerine sahip olmuş olur. Yani Sınıf modüller, nesnelerin ortak özelliklerini bir araya topladığımız bir kutudur.

Şimdi bunu bir VBA örneği ile pekiştirelim.

Oluşturacağım userform içerisinde onlarca textbox olacak ve benim isteğim ise bütün textbox’lara rakam girilebilsin ama diğer karakterlere izin verilmesin istiyorum.

Boş bir Excel kitabı açtıktan sonra Alt+F11 tuşları ile VBA ekranına geçelim. Ardından Insert sekmesinden Class Module ekliyoruz.

Oluşturduğumuz modüle bir isim veriyoruz.(bitechclass)

Oluşturduğumuz Class Module içerisine textbox özelliklerini tanımlayacağımız kod kümesini yazıyoruz.

Private WithEvents txtCustom As MSForms.TextBox




Public Property Set Control(txtNew As MSForms.TextBox)

Set txtCustom = txtNew

End Property




Private Sub txtCustom_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Select Case KeyAscii

Case 46 To 57

Case Else

    KeyAscii = 0

End Select

End Sub




Private Sub Class_Terminate()

Set txtCustom = Nothing

End Sub

 

Şimdi tanımladığımız özellikleri kullanabilmek için bir userform ve içine istediğiniz sayıda textbox ekliyorsunuz.

Ardından userform üzerinde bir boşluğa çift tıklayarak formun olaylarına gidiyoruz. Formun yüklenmesi yani initialize olayı içinde gerçekleşmeli fakat aşağıdaki kodu direk yapıştırabilirsiniz.

Dim colTbxs As Collection

Private Sub UserForm_Initialize()

    Dim ctlLoop As MSForms.Control

    Dim clsObject As bitechclass

    Set colTbxs = New Collection




    For Each ctlLoop In Me.Controls

      

        If TypeOf ctlLoop Is MSForms.TextBox Then

          

            Set clsObject = New bitechclass

            

            Set clsObject.Control = ctlLoop

          

            colTbxs.Add clsObject

        End If

    Next ctlLoop

   

End Sub

Private Sub UserForm_Terminate()

    Set colTbxs = Nothing

End Sub

Artık userform’u çalıştırdığınızda metin girememe kısıtlamasının tüm textboxlar da olduğunu görebilirsiniz. Tabii ki bu kadar küçük bir yapıda kullanılan Class Module büyük program parçaları için çok büyük öneme sahiptir.

Örnek Excel dosyasına classmodule örneği linki üzerinden ulaşabilirsiniz.

 

Ufuk Çağlayan

MSOS

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*