EXCEL VBA'DA CLASS MODUL

 

EXCEL VBA CLASS MODUL NEDİR?

Excel VBA Sınıf Modülleri, VBA'da özel nesneler oluşturmanıza olanak tanır. Bu nesneler, Excel'de programlamaya yapılandırılmış ve modüler bir yaklaşım sağlayarak verileri ve kodu kapsülleyebilir. VBA Sınıf Modülleri ile kendi özelliklerinizi, yöntemlerinizi ve olaylarınızı tanımlayabilir, daha verimli ve düzenli kod geliştirme olanağı sağlayabilirsiniz.

Aşağıdaki VBA Sınıf Modülleri örneğine bakalım. Bu örnekte, tek bir özel değişkeni “mName” ve iki özelliği olan “Name” (hem Get hem de Let) “Person” adlı bir sınıf modülümüz var. “Name” özelliği, özel değişkenin değerini almaya ve ayarlamaya izin verir.

VBA Sınıf Modülleri Örneği - 1

Standart modül “TestPersonClass” “Person” sınıfını kullanarak gösterir. “Person” sınıfının “person” adlı bir örneğini oluşturur, Name özelliğini kullanarak adı ayarlar ve kişinin adını kullanarak bir selamlama içeren bir ileti kutusu görüntüler.

VBA Sınıf Modülleri Örneği - 2

“TestPersonClass” alt yordamını çalıştırdığınızda, “Merhaba, Peter Andrews!” mesajını veren bir mesaj kutusu görüntülenecektir.

VBA Sınıf Modülleri Örneği - 3

EXCEL VBA'DA CLASS MODUL NEDİR?

Sınıf Modülü, nesneler oluşturmak için bir taslaktır. Belirli bir sınıftaki nesnelerin yapısını ve davranışını tanımlar.

Değişkenler, özellikler, prosedürler (yöntemler) ve olaylar için bir kapsayıcıdır. Bir sınıfın örneğini oluşturduğunuzda, esasen sınıf tanımına dayalı bir nesne oluşturuyorsunuz.

Her nesnenin kendine özgü bir özellik ve yöntem kümesi olabilir; bu da kodun daha esnek ve yeniden kullanılabilir olmasını sağlar.


Örnekler

Örnek 1

Diyelim ki Excel'de çalışan verilerini yönetmek istiyorsunuz. Name, Age ve Salary gibi özelliklere sahip "Employee" adlı bir Class Module oluşturabilirsiniz.

Daha sonra ikramiyeleri hesaplamak, çalışan bilgilerini güncellemek ve diğer ilgili işlemleri gerçekleştirmek için yöntemler tanımlayabilirsiniz. Bu sınıfla, her biri farklı bir çalışanı temsil eden Employee nesnesinin birden fazla örneğini oluşturabilir ve böylece verileri yönetmeyi ve düzenlemeyi kolaylaştırabilirsiniz.

  • Adım 1: Burada Çalışan Sınıfı Modülünü oluşturuyoruz.
  • Modülde, çalışanın adını, yaşını ve maaşını depolamak için özel değişkenler ("mName", "mAge", "mSalary") tanımlıyoruz.
  • Public Property Get ve Property Let prosedürleri, özel değişkenlere erişim ve bunları değiştirme özelliklerini tanımlar.

Örneğin, Name özelliği, bir Property Get prosedüründen (Name özelliğinin değerini almak için) ve bir Property Let prosedüründen (Name özelliğinin değerini ayarlamak için) oluşur.

  • Alt+F11 tuşlarına basarak Excel'de Visual Basic Düzenleyicisi'ni (VBE) açın.
VBA Sınıf Modülleri - Örnek 1 - Adım 1a
  • VBE menüsünde “Ekle”ye tıklayıp “Sınıf Modülü”nü seçerek yeni bir Sınıf Modülü ekleyin.
Örnek 1 - Adım 1b
  • Sınıf Modülü penceresinde, varsayılan adı “Class1”i “Çalışan” olarak değiştirin (bunu, sol taraftaki Özellikler penceresinde “(Ad)” özelliğini düzenleyerek yapabilirsiniz).
Örnek 1 - Adım 1c
  • Adım 2: Employee sınıf modülü için kod penceresine aşağıdaki VBA kodunu ekliyoruz :
Örnek 1 - Adım 2
  • “mName”, “mAge” ve “mSalary” özel değişkenleri, sınıftaki özelliklere ait verileri depolayacaktır.
  • Adım 3: Aşağıdaki satır, Property Get prosedürü ile “Name” adlı bir özelliği tanımlar. Prosedür, özelliğe erişildiğinde “mName” özel değişkeninin değerini döndürür.
Örnek 1 - Adım 3
  • Adım 4: Bu satır, Property Let prosedürü ile “Name” adlı bir özelliği tanımlar. Prosedür, özellik değiştirildiğinde private değişken “mName”e argüman olarak geçirilen değeri atar.
Örnek 1 - Adım 4a

“Yaş” ve “Maaş” özelliklerinde de aynı düzen izlenmektedir.

Örnek 1 - Adım 4b
Örnek 1 - Adım 4c

Sınıf modülünü kaydedin ve Excel Çalışma Kitabı'na dönmek için çıkın.

  • Adım 5: Şimdi, Employee Class'ı test etmek için bir alt rutin oluşturun. Aşağıdaki satırlar, "New" anahtar sözcüğünü kullanarak Employee sınıfının nesneleri olarak iki değişken, "emp1" ve "emp2" bildirir.
Örnek 1 - Adım 5
  • Adım 6: Aşağıdaki satırlar emp1 ve emp2 nesnelerinin özelliklerini ayarlar. Her nesnenin özelliklerine (Ad, Yaş ve Maaş) belirli değerler atanır.
Örnek 1 - Adım 6
  • Adım 7: Aşağıdaki satırlarda çalışanın adını ve ikramiye miktarını gösteren mesaj kutuları gösterilmektedir.
Örnek 1 - Adım 7
  • Adım 8: Şimdi modülü kaydedin ve VBE'den çıkın. Şimdi Makro listesini açmak için “Alt + F8” tuşlarına basın, “TestEmployeeClass”ı seçin ve ardından makroyu çalıştırın.
VBA Sınıf Modülleri - Örnek 1 - Adım 8
  • Adım 9: “Bonus Hesapla” fonksiyonunu çağırdığımızda her çalışanın adını ve bonus miktarını gösteren bir mesaj kutusu görüyoruz.
VBA Sınıf Modülleri - Örnek 1 - Adım 9a

VBA Sınıf Modülleri - Örnek 1 - Adım 9b

CLASS MODUL KODU:

Private mName As String
Private mAge As Integer
Private mSalary As Double

Public Property Get Name() As String
Name = mName
End Property

Public Property Let Name(ByVal value As String)
mName = value
End Property

Public Property Get Age() As Integer
Age = mAge
End Property

Public Property Let Age(ByVal value As Integer)
mAge = value
End Property

Public Property Get Salary() As Double
Salary = mSalary
End Property

Public Property Let Salary(ByVal value As Double)
mSalary = value
End Property

Public Function CalculateBonus() As Double
‘ Customize your bonus calculation logic here
CalculateBonus = 0.1 * mSalary
End Function

  • Module code:

Sub TestEmployeeClass()
Dim emp1 As New Employee
Dim emp2 As New Employee

emp1.Name = “John Smith”
emp1.Age = 30
emp1.Salary = 50000

emp2.Name = “Jane Doe”
emp2.Age = 35
emp2.Salary = 60000

MsgBox emp1.Name & ” Bonus: $” & emp1.CalculateBonus
MsgBox emp2.Name & ” Bonus: $” & emp2.CalculateBonus
End Sub


Örnek 2

Excel'de bir bankacılık sistemini simüle etmeniz gerektiğini düşünün.

  1. AccountNumber, Balance ve Owner gibi özelliklere sahip “BankAccount” adında bir Sınıf Modülü oluşturabilirsiniz.
  2. Derste para yatırma, çekme ve faiz hesaplama yöntemleri yer alabilir.
  3. BankAccount nesnesinin birden çok örneğini oluşturarak Excel uygulamanızda birden çok banka hesabını modelleyebilirsiniz.
  • Adım 1: Önceki örnekte belirtilen adımları izleyerek “BankAccount” adında yeni bir Sınıf Modülü oluşturun.
  • “BankAccount” sınıf modülü, hesap numarasını, bakiyeyi ve sahibinin adını depolamak için özel değişkenler (mAccountNumber, mBalance, mOwner) tanımlar.
  • Özel değişkenlere erişmek ve onları değiştirmek için özellikler oluşturmak amacıyla Özellik Al ve Özellik Bırak prosedürleri kullanılır.

“BankAccount” sınıf modülüne aşağıdaki kodu girin:

Excel VBA Sınıf Modülleri - Örnek 2 - Adım 1
  • Adım 2: Bu satır, Property Get prosedürü ile “AccountNumber” adlı bir özelliği tanımlar. Property Get prosedürü, özelliğe erişildiğinde “mAccountNumber” özel değişken değerini döndürür.
Örnek 2 - Adım 2
  • Adım 3: Bu satır, Property Let prosedürü ile “AccountNumber” adlı bir özelliği tanımlar. Property Let prosedürü, özellik değiştirildiğinde private değişken “mAccountNumber”a argüman olarak geçirilen değeri atar.
Örnek 2 - Adım 3
  • Adım 4: Aynı düzen “Bakiye” ve “Sahip” mülkleri için de takip edilir.
Örnek 2 - Adım 4
  • Adım 5: Aşağıdaki satır, bir tutarı argüman olarak alıp bunu hesap bakiyesine ("mBalance") ekleyen "Deposit" adlı genel bir alt rutini tanımlar.
Örnek 2 - Adım 5
  • Adım 6: Aşağıda, bir miktarı argüman olarak alan ve çekilen miktarın hesap bakiyesinden az veya ona eşit olup olmadığını kontrol eden "Withdraw" adlı genel bir alt rutin tanımlıyoruz. Eğer öyleyse, miktarı bakiyeden düşer "(mBalance"). Miktar bakiyeyi aşarsa, yetersiz bakiye olduğunu belirten bir mesaj kutusu görüntüler.
Örnek 2 - Adım 6
  • Adım 7: Aşağıda, bir faiz oranını argüman olarak alan ve mevcut bakiyeyi faktörle (“1 + interestRate”) çarparak yeni bakiyeyi (“mBalance”) hesaplayan “CalculateInterest” adlı genel bir alt rutin tanımlıyoruz.
Örnek 2 - Adım 7
  • Adım 8: Sınıf Modülü penceresini kapatın ve Excel çalışma kitabına dönün. “BankAccount” sınıfını normal bir modülde test etmek için aşağıdaki kodu girin. Burada, BankAccount sınıfının örneklerini oluşturuyoruz.
Excel VBA Sınıf Modülleri - Örnek 2 - Adım 8
  • Adım 9: Aşağıdaki satırlar acc1 ve acc2 nesnelerinin özelliklerini ayarlar. Her nesnenin özelliklerine (HesapNumarası, Bakiye ve Sahip) belirli değerler atanır.
Örnek 2 - Adım 9
  • Adım 10: Aşağıda, acc1 ve acc2 nesnelerinde sırasıyla “BankAccount” sınıfının Deposit ve Withdraw alt rutinlerini çağırıyoruz. Deposit alt rutini acc1'in hesap bakiyesine (“mBalance”) 5000 eklerken, Withdraw alt rutini yeterli fon varsa acc2'nin hesap bakiyesinden 2000 çıkarır.
Örnek 2 - Adım 10
  • Adım 11: Aşağıdaki satır acc1 nesnesindeki “BankAccount” sınıfının “CalculateInterest” alt yordamını çağırır ve faiz oranını (0,05) argüman olarak geçirir. “CalculateInterest” alt yordamı acc1'in hesap bakiyesini (mBalance) belirtilen faiz oranına göre hesaplar ve günceller.
Örnek 2 - Adım 11
  • Adım 12: Bu satırlar acc1 ve acc2'nin geçerli bakiyesini gösteren mesaj kutularını görüntüler. Bakiyelere “BankAccount” sınıfının Balance özelliği kullanılarak erişilir.
Örnek 2 - Adım 12
  • Adım 13: Şimdi modülü kaydedin ve VBE'den çıkın. Şimdi Makro listesini açmak için “Alt + F8” tuşlarına basın, “TestBankAccountClass”ı seçin ve ardından makroyu çalıştırın.
Excel VBA Sınıf Modülleri - Örnek 2 - Adım 13
  • Adım 14: Makroyu çalıştırdığınızda Hesap 1 ve Hesap 2'nin bakiyelerini gösteren bir ileti kutusu göreceksiniz
Excel VBA Sınıf Modülleri - Örnek 2 - Adım 14a
Excel VBA Sınıf Modülleri - Örnek 2 - Adım 14b

İşte tam kod:

  • Sınıf modülü kodu:

Private mAccountNumber As String
Private mBalance As Double
Private mOwner As String

Public Property Get AccountNumber() As String

AccountNumber = mAccountNumber
End Property

Public Property Let AccountNumber(ByVal value As String)
mAccountNumber = value
End Property

Public Property Get Balance() As Double
Balance = mBalance
End Property

Public Property Let Balance(ByVal value As Double)
mBalance = value
End Property

Public Property Get Owner() As String
Owner = mOwner
End Property

Public Property Let Owner(ByVal value As String)
mOwner = value
End Property

Public Sub Deposit(ByVal amount As Double)
mBalance = mBalance + amount
End Sub

  • Class module code continuation:

Public Sub Withdraw(ByVal amount As Double)
If amount <= mBalance Then
mBalance = mBalance – amount
Else
MsgBox “Insufficient funds.”
End If
End Sub

Public Sub CalculateInterest(ByVal interestRate As Double)
mBalance = mBalance * (1 + interestRate)
End Sub

  • Module code:

Sub TestBankAccountClass()
Dim acc1 As New BankAccount
Dim acc2 As New BankAccount

acc1.AccountNumber = “123456789”
acc1.Balance = 10000
acc1.Owner = “John Smith”

acc2.AccountNumber = “987654321”
acc2.Balance = 5000
acc2.Owner = “Jane Doe”

acc1.Deposit 5000
acc2.Withdraw 2000

acc1.CalculateInterest 0.05

MsgBox “Account 1 Balance: $” & acc1.Balance
MsgBox “Account 2 Balance: $” & acc2.Balance
End Sub


Sınıf Modülü ve Nesneler

VBA Sınıf Modülleri ve nesneler el ele gider. Bir VBA Sınıf Modülleri, nesnelerin yapısını ve davranışını tanımlayan bir plan veya şablon gibidir.

Öte yandan, bir nesne belirli bir varlığı temsil eden bir sınıfın örneğidir. Sınıf Modülleri aynı plana dayalı birden fazla nesne oluşturma yeteneği sağlayarak kodun yeniden kullanılabilirliğini ve modülerliğini sağlar.

Her nesnenin kendine ait özellik ve yöntem kümesi olabilir; bu da verilerin yönetilmesini ve işlenmesini kolaylaştırır.

Dikkat Edilmesi Gereken Önemli Noktalar

  • Bir nesne oluşturulduğunda otomatik olarak yürütülen özel prosedürler olan VBA sınıf modülü oluşturucuları desteklenir.
  • VBA Sınıf Modülleri yıkıcıları desteklemez, bu nedenle nesnenin kullanımından sonra herhangi bir kaynağı manuel olarak serbest bırakmalı veya temizlemelisiniz. Bir VBA Sınıf Modülü yıkıcısı veya bir sonlandırıcı veya temizleme yöntemi, bir nesne yok edildiğinde veya kapsam dışına çıktığında otomatik olarak çağrılan özel bir yöntemdir.
  • Bir Sınıf Modülünün adını değiştirmenin eski adı referans alan mevcut kodu bozabileceğini unutmamak önemlidir. Bu nedenle, Sınıf Modüllerini yeniden adlandırırken dikkatli olmanız ve ilgili tüm referansları buna göre güncellemeniz önerilir.

1. VBA Modülü ile Sınıf Modülü arasındaki fark nedir?

VBA Modülü, VBA kodu için bir kapsayıcıdır ve prosedürler, işlevler ve değişkenler içerebilir. Öncelikle genel amaçlı kodu depolamak için kullanılır.

Öte yandan, bir Sınıf Modülü özel olarak özel nesneler oluşturmak için tasarlanmıştır. Nesnelerin yapısını ve davranışını tanımlamak için bir plan veya şablon sağlar.

2. VBA'da Sınıf Modülleri Neden Kullanılır?

VBA Sınıf Modülleri, kapsülleme, yeniden kullanılabilirlik, nesne yönelimli programlama, özelleştirme, iyileştirilmiş kod bakımı, gelişmiş iş birliği ve olay işleme sunar.

Nesneleri tasarlamak ve uygulamak için yapılandırılmış ve etkili bir yaklaşım sağlarlar ve daha modüler, yeniden kullanılabilir ve sürdürülebilir kodla sonuçlanırlar.

VBA Sınıf Modülleri ve nesneler el ele gider. Bir VBA Sınıf Modülü, nesnelerin yapısını ve davranışını tanımlayan bir plan veya şablon gibidir.

Öte yandan, bir nesne belirli bir varlığı temsil eden bir sınıfın örneğidir. Sınıf Modülleri, aynı plana dayalı birden fazla nesne oluşturma yeteneği sağlayarak kodun yeniden kullanılabilirliğini ve modülerliğini sağlar.

Her nesnenin kendi özellik ve yöntem kümesi olabilir ve bu da verileri yönetmeyi ve düzenlemeyi kolaylaştırır.

3. VBA'daki Sınıf Modülleri neden çalışmıyor?

VBA Sınıf Modülleri beklendiği gibi çalışmıyorsa, bunun nedeni aşağıdakilerden biri olabilir:

1) Sözdizimi Hataları: Eksik parantez veya yazım hataları gibi VBA Sınıf Modülleri kodunda sözdizimi hatalarını kontrol edin.

2) Nesne Örnekleme: Sınıf Modülünü kullanarak nesneleri doğru şekilde örneklediğinizden emin olun. “Yeni” anahtar sözcüğünü kullanın ve nesneyi bir değişkene atayın.

3) Kapsam Sorunları: VBA Sınıf Modüllerinin kendi kapsamları vardır, bu nedenle değişkenlerin ve prosedürlerin Sınıf Modülü içinde düzgün şekilde tanımlandığından emin olun.

4) Sınıf Modülü Referansları: Kodunuzda Sınıf Modülüne doğru şekilde başvurduğunuzu doğrulayın.



Yorum Gönder

DT KARİYER KPSS Dünyasına Hoş Geldiniz
Sevgili dostum nasıl yardımcı olabilirim?
Bu alana yazınız...