Excel VBA Sınıfı Nedir?
Aşağıdaki örneği ele alalım:
Sınıf1 modülünde:

Modül1'de:

Ayrıntıları Hemen sekmesinde yazdıracaktır.

Excel VBA'da Özel Sınıf ve Nesneler Nasıl Oluşturulur?
VBA Sınıf Özelliğini uygulamak için aşağıda gösterildiği gibi şu adımları gerçekleştiriyoruz:
Adım 1: Araç çubuğundaki “Geliştirici” bölümüne gidin ve “Visual Basic” seçeneğine tıklayın. Şimdi, VBA Editörü fonksiyonlar ve Alt prosedürler eklemek için açılır. Ardından, yeni bir modül veya boş sayfa oluşturmak için “Ekle” ve “Modül” düğmelerine tıklayın.


Adım 2: “Ekle” butonuna tıklayın ve “Sınıf Modülü”ne tıklayın. VBA Sınıf Özelliğini tanımlamak için yeni bir sınıf modülü oluşturulacaktır.

Adım 3: Sınıf modülünde, Öğrenci Ayrıntılarını kabul eden bir sınıf oluşturmak için gerekli değişkenleri tanımlayın.

Adım 4: Kullanıcıdan Öğrenci bilgilerini girmek için bir Genel alt rutin oluşturun.

Adım 5: VBA InputBox fonksiyonunu kullanarak kullanıcıdan tüm ayrıntıları alın .

Adım 6: Kullanıcı tarafından girilen öğrenci ayrıntılarını yazdırmak için başka bir Genel alt rutin başlatın.

Adım 7: MsgBox fonksiyonunu kullanarak tüm öğrenci bilgilerini yazdırın.

VBA'da tek bir MsgBox'taki tüm detayları yazdırmak için, bir sonraki satıra devam ifadesi olarak "& _" ile eşleştirilmiş vbCrLf fonksiyonunu kullanırız. Bu şekilde, tek bir MsgBox fonksiyonunu kullanarak birden fazla satır yazdırabiliriz .
Adım 8: Sınıfı çağırmak için modüle gidin.

Adım 9: Öğrenci Ayrıntısı'nı uygulamak için VBA Sınıfını “Class2” olarak çağıracak bir alt prosedür oluşturun.

Adım 10: Sınıfı çağırmak için kullanılacak yeni bir nesne oluşturun.

Adım 11: Yeni tanımlanan nesneyi kullanarak Sınıf fonksiyonlarını çağırın.

In the Class Module:
Public Sname As String
Public marks As Double
Public rno As Integer
Public Subject As String
Public Sub GetDetails()
Sname = InputBox(“Enter Name: “)
marks = InputBox(“Enter marks: “)
rno = InputBox(“Enter Roll No.: “)
Subject = InputBox(“Enter Subject: “)
End Sub
Public Sub PrintDetail()
MsgBox “Name: ” & Sname & vbCrLf & _
“Marks: ” & marks & vbCrLf & _
“Roll No.: ” & rno & vbCrLf & _
“Subject: ” & Subject
End Sub
In the Normal Module:
Sub CreateStudentDetail()
Dim myStud As New Class2
myStud.GetDetails
myStud.PrintDetail
End Sub
Step 12: Print the Subroutine. The details will be displayed in a MsgBox.





Örnekler
Excel VBA'da VBA Sınıfı modülünün uygulanmasına ilişkin birkaç örneğe bakalım.
Örnek #1
Hesap numarasını bildirip para yatırma veya çekme gibi işlemleri gerçekleştirdiğimiz bir Bankacılık sistemini uygulamamız gerektiğini varsayalım.
Adım 1: “Ekle” düğmesine tıklayın ve “Sınıf Modülü”ne tıklayın. VBA Sınıf Özelliğini tanımlamamız için yeni bir sınıf modülü oluşturulacaktır.

Adım 2: Sınıf modülünde, bir hesaptaki Hesap numarasını ve bakiyeyi kabul eden iki Özel değişken tanımlayın.

Adım 3: Verilen hesap numarasını kabul edecek genel bir alt rutin tanımlayın.

Adım 4: Hesap numarası değerini döndürmek için bunu bir string olarak kabul ediyoruz.

Adım 5: Hesapta bulunan bakiyeyi döndürmek için bunu yapacak bir alt rutin tanımlıyoruz.

Adım 6: Bir miktar para yatırmak ve mevcut bakiyemizi artırmak için bir alt rutin başlatıyoruz.

Adım 7: Geri çekilmek ve ifadede yansıtmak için bu görevi gerçekleştirecek başka bir alt rutin oluşturuyoruz.

Burada işlemin onaylanması için belirli bir koşulun karşılanması gerekir. Yani çekilecek tutar mevcut bakiyeyi aşmamalıdır, aksi takdirde işlem gerçekleştirilmeyecektir.
Adım 8: Sınıfı çağırmak için modüle gidin.

Adım 9: Sınıfı çağırmak için modülde bir alt rutin başlatın.

Adım 10: Sınıfı çağıracak bir nesne tanımlayın.

Adım 11: Sınıf fonksiyonlarını çağırın ve kalan bakiyeyi yazdırın.

Bu, Hemen sekmesinde 300 yazdıracaktır.
In the Class module:
Private accountNumber As String
Private balance As Double
Public Sub SetAccountNumber(ByVal accNum As String)
accountNumber = accNum
End Sub
Public Function GetAccountNumber() As String
GetAccountNumber = accountNumber
End Function
Public Function GetBalance() As Double
GetBalance = balance
End Function
Public Sub Deposit(ByVal amount As Double)
balance = balance + amount
End Sub
Public Sub Withdraw(ByVal amount As Double)
If amount <= balance Then
balance = balance – amount
Else
MsgBox “Insufficient funds!”
End If
End Sub
In the main module:
Sub TestBankAccount()
Dim myAccount As New Class3
myAccount.SetAccountNumber “123456789”
myAccount.Deposit 500
myAccount.Withdraw 200
Debug.Print “Account Number: ” & myAccount.GetAccountNumber
Debug.Print “Balance: ” & myAccount.GetBalance
End Sub
Adım 12: Yukarıdaki kodu çalıştırın. Çıktı aşağıda gösterilmiştir:

Örnek #2
Kullanıcıdan gelen argümanlar olarak dikdörtgenin uzunluğu ve yüksekliği verildiğinde Çevresini ve Alanını bulabileceğiniz ve yazdırabileceğiniz bir Sınıf dikdörtgeni tanımladığınız bir örneği ele alalım.
Adım 1: “Ekle” ve “Sınıf Modülü”ne tıklayın. VBA Sınıf Özelliğini tanımlamak için yeni bir sınıf modülü oluşturulacaktır.

Adım 2: Dikdörtgenin Genişliğini ve Yüksekliğini özel değişkenler olarak bildirin.

Adım 3: Bir dikdörtgenin genişliğini kabul edecek bir alt rutin tanımlayın.

Verilen boyutların pozitif olup olmadığını kontrol etmek için bir If-Else ifadesi başlatılır. Değilse, bir Hata mesajı yazdırır.
Adım 4: Benzer şekilde dikdörtgenin yüksekliğini kabul eden bir Alt Rutin tanımlanır.

Şekillerin pozitif değerlere sahip olması gerekir ki hesaplamalar doğru bir şekilde yapılabilsin. Bir dikdörtgenin boyutlarının negatif olması mümkün değildir!
Adım 5: Dikdörtgenin alanını döndüren bir fonksiyon bildirin. Dikdörtgenin alanı genişlik ve yükseklik değerleri çarpılarak hesaplanır.

Adım 6: Benzer şekilde, dikdörtgenin çevresini hesaplayan bir fonksiyon oluşturun. Çevre, genişlik ve yükseklik değerlerinin toplamının iki katına çıkarılmasıyla hesaplanır.

Adım 7: Sınıfı çağırmak için modüle gidin.

Adım 8: Sınıfı çağıracak bir alt rutin oluşturun.

Adım 9: Sınıf modülünü çağıracak bir nesne tanımlayın.

Adım 10: Fonksiyonları kullanarak dikdörtgenin genişlik ve yükseklik değerlerini bildirin.

Adım 11: Fonksiyonları çağırarak dikdörtgenin Alanını ve Çevresini yazdırın.

Kod:
In the Class Module:
Private width As Double
Private height As Double
Public Sub SetWidth(ByVal w As Double)
If w > 0 Then
width = w
Else
MsgBox “Width must be greater than zero!”
End If
End Sub
Public Sub SetHeight(ByVal h As Double)
If h > 0 Then
height = h
Else
MsgBox “Height must be greater than zero!”
End If
End Sub
Public Function GetArea() As Double
GetArea = width * height
End Function
Public Function GetPerimeter() As Double
GetPerimeter = 2 * (width + height)
End Function
In the main module:
Sub TestRectangle()
Dim myRectangle As New Class4
myRectangle.SetWidth 5
myRectangle.SetHeight 3
Debug.Print “Area: ” & myRectangle.GetArea
Debug.Print “Perimeter: ” & myRectangle.GetPerimeter
End Sub
Adım 12: Yukarıdaki kodu yazdırın. Çıktı Immediate sekmesinde yazdırılır.

VBA'da Sınıfların Artıları ve Eksileri
| Artıları | Eksileri |
|---|---|
| Kapsülleme: İlgili verilerin ve davranışların tek bir varlık içerisinde düzenlenmesine olanak tanır. | Öğrenme Eğrisi: Nesne yönelimli programlamaya aşina olmayanlar için sınıf modüllerini anlamak ve etkili bir şekilde kullanmak bir öğrenme eğrisi gerektirebilir. |
| Yeniden Kullanılabilirlik: Tek bir sınıf tanımına dayalı birden fazla örnek oluşturarak kodun yeniden kullanılabilirliğini sağlar. | Ek Yük: Sınıf modüllerinin tanıtılması, basit prosedürel koda kıyasla bellek ve performans açısından ek yük getirebilir. |
| Modülerlik: Kodu ayrı bileşenlere ayırarak modüler programlamayı destekler. | Sınırlı Kapsam: Sınıf modülleri tanımlandıkları VBA projesiyle sınırlıdır, bu da projeler veya uygulamalar arasında paylaşımı zorlaştırır. |
| Nesne Yönelimli Programlama (OOP): VBA Sınıf Mirası, VBA Sınıf Polimorfizmi ve VBA Sınıf kapsüllemesi gibi OOP prensiplerinin uygulanmasına olanak tanır. | Projenin Karmaşıklığı: Proje daha karmaşık hale geldikçe, birden fazla sınıf arasındaki etkileşimleri yönetmek zorlaşabilir. |
| Veri Bütünlüğü: Verilerin nasıl değiştirilebileceğini ve erişilebileceğini kontrol ederek veri bütünlüğünün sağlanmasını güvence altına alır. | Hata Ayıklama: Sınıf modüllerini içeren hata ayıklama kodu, prosedürel koddan daha karmaşık olabilir ve sorun tanımlama ve çözümü için ek çaba gerektirebilir. |
Dikkat Edilmesi Gereken Önemli Noktalar
- Sınıflar oluşturmadan önce, sınıf yapınızı planlamak ve tasarlamak için zaman ayırın. Nesneleriniz için ihtiyaç duyduğunuz özellikleri, yöntemleri ve ilişkileri belirleyin.
- Sınıflarınız, özelliklerinizin ve metotlarınızın adlandırma kurallarını tutarlı ve açıklayıcı bir şekilde izleyin.
- Sınıf üyelerinizin (özellikler ve yöntemler) görünürlüğünü ve erişilebilirliğini kontrol etmek için erişim tanımlayıcılarını (Genel, Özel, vb.) kullanın. Veri bütünlüğünü korumak ve dahili uygulama ayrıntılarına erişimi kontrol etmek için verileri uygun şekilde kapsülleyin.
- Sınıf modülleriniz içinde aşırı global değişkenler kullanmaktan kaçının. VBA'da global değişkenleri aşırı kullanmak , kodun bakımı ve hata ayıklamasında zorluğa yol açabilir. Bunun yerine, sınıf içinde verileri yönetmek ve geçirmek için özellikler ve yöntem parametrelerini çalıştırın.
- Sınıf alanlarını (değişkenleri) herkese açık olarak ifşa etmekten kaçının. Bunun yerine, verileri kapsüllemek ve kontrollü erişim sağlamak için özellikleri kullanın.
