VBA Enum, "numaralandırma"nın kısaltması, Excel VBA'da uzmanlaşmış bir değişken türüdür. Her biri kendine özgü bir değere sahip, ilgili sabitler veya öğelerden oluşan özel bir küme oluşturmanıza olanak tanır. Özünde, numaralandırmalar, birkaç öğeyi sırayla belirtmeye benzer şekilde, bir öğe veya seçenek listesi tanımlamanın yapılandırılmış bir yolunu sağlar.
Bir örneğe bakalım. Bu örnekte, haftanın günlerini temsil eden "DaysOfWeek" adlı bir Enum'ımız var. Pazar'dan Cumartesi'ye kadar haftanın her günü, Enum içinde belirgin bir sabitle ilişkilendirilir. Bu sayım, farklı günler için açık ve açıklayıcı etiketler sağlamaya yardımcı olur.

Kod çalıştırıldığında, şu mesajı görüntüleyen bir mesaj kutusu görünecektir:
"Bugün salı."

Bu sonuç, Salı gününün bugün değişkenine atanması ve bu değerin karşılık gelen gün adı olan "Salı" ile eşleştirilmesi için Select Case ifadesinin kullanılmasıyla elde edilir.
Not: Select Case ifadesi kullanılmazsa, kodun çıktısı bugün değişkenine atanan dahili dizin değerini görüntüler. Bu durumda, "DaysOfWeek" Enum'unda Salı sabitinin konumunu temsil eden sayısal bir değer görüntüler. Çıktının gerçek günü yansıttığından emin olmak için dizini karşılık gelen gün adıyla eşleştirmek için Select Case ifadesini kullanmak önemlidir.
ÖNEMLİ NOKTALAR
- VBA Enum Dizesi, sayısal sabitlerin yanı sıra dize değerlerini de temsil edebilir ve kodunuzda kullanılan dizeler için açıklayıcı adlar sağlayabilir.
- VBA Enum'ları yalnızca sabitler için kullanılmaz, aynı zamanda prosedürlerde parametre veya dönüş türü olarak da kullanılabilir.
- Kodunuzda VBA Enum'larını kullanmak başkalarının projelerinizi anlamasını ve projeleriniz üzerinde işbirliği yapmasını kolaylaştırır.
- VBA EnumChildWindows fonksiyonu, belirli bir üst pencerenin alt pencerelerini numaralandırmak için Windows API çağrılarında kullanılır ve sıklıkla GUI otomasyonu için kullanılır.
- VBA EnumWindows, en üst düzey pencereleri sıralayan ve açık pencereleri listeleme veya etkileşimleri otomatikleştirme gibi görevlere olanak tanıyan başka bir Windows API işlevidir.
Sözdizimi
Bir Enum'ı bildirmenin sözdizimi basittir:
Enum EnumName
Constant1
Constant2
' …
End EnumEnum içindeki her sabite, varsayılan olarak 0'dan başlayarak artımlı bir tamsayı değeri atanır.
Örnekler
VBA ENUM fonksiyonunun nasıl uygulanacağına dair bazı örneklere bakalım.
Örnek 1
Sütun A'da belirtilen giyim bedenlerinin bir veri kümesine sahip olduğumuzu ve Sütun B'de giyim bedeninin Türünü istediğimizi varsayalım, bunu VBA Enum'ı kullanarak aşağıdaki şekilde elde edebiliriz:

- Adım 1: Excel'de Visual Basic for Applications (VBA) düzenleyicisini açın. Düzenleyiciyi açmak için Alt + F11 tuşlarına basın.

- Adım 2: VBA düzenleyicide, var olan herhangi bir modüle veya sol bölmedeki çalışma kitabı adına sağ tıklayarak > Ekle > Modül seçeneğini kullanarak yeni bir modül ekleyin.

- Adım 3: Burada, dört adlandırılmış sabitle ClothingSize adlı bir numaralandırma tanımlıyoruz: Small, Medium, Large ve XLarge. Her sabit belirli bir sayısal değerle ilişkilendirilir (sırasıyla 30, 40, 45 ve 50).

- Adım 4: Bu adımda, Çalışma Sayfası veri türünden “ws” adlı bir değişken tanımlıyoruz ve Set ifadesini kullanarak bunu makronun bulunduğu çalışma kitabındaki “Sheet1” adlı çalışma sayfasına atıyoruz.

- Adım 5: Burada, belirtilen çalışma sayfasının A sütunundaki verilerle son satırı hesaplıyoruz. Bunu, çalışma sayfasının son satırından başlayarak ve A sütunundaki son boş olmayan hücreyi bulana kadar yukarı doğru hareket ederek yapar.

- Adım 6: Bu adımda bir döngü oluşturuyoruz. Bu döngü, ikinci satırdan (başlığı atlamak için) başlayarak önceki adımda bulunan son satıra kadar her satırı yineliyor.

- Adım 7 : Burada, geçerli satırın ilk sütunundaki (sütun A) değerin sayısal olup olmadığını kontrol ediyoruz. Bu, yalnızca sayısal değerler içeren satırların işlenmesini sağlar.

- Adım 8: Mevcut satırın ilk sütunundaki sayısal değeri tutmak için sizeNumber adlı bir değişken bildiriyoruz. Bu değer, karşılık gelen boyutu belirlemek için kullanılacaktır.

- Adım 9: Bu Select Case bloğunda, sizeNumber'a göre karşılık gelen beden adını belirliyoruz. sizeNumber'ın ClothingSize numaralandırmasındaki sabitlerden biriyle eşleşip eşleşmediğine bağlı olarak, sizeName değişkenine uygun beden adını ("Small", "Medium", "Large", "XLarge") atıyoruz. sizeNumber herhangi bir sabitle eşleşmiyorsa, sizeName değişkenine "Unknown" atıyoruz.

- Adım 10: Burada belirlenen sizeName'i mevcut satırın ikinci sütununa (B sütunu) atıyoruz.

- Adım 11: Tüm satırları işledikten sonra, bu bölümü kullanarak ikinci sütunun tamamını (B sütunu) metin olarak biçimlendiririz; böylece Enum tabanlı boyut adları hücrelerde metin olarak görüntülenir.

- Adım 12: Modülü kaydedin ve VBE'den çıkın. Şimdi verilerin mevcut olduğu Sheet1'e gidin ve makro penceresini açmak için Alt + F8 tuşlarına basın.

- Adım 13: “AssignClothingSizes” makrosunu seçin ve “Çalıştır”a tıklayın. Makroyu çalıştırdıktan sonra, B sütunu otomatik olarak giysi beden türüyle doldurulur.

İşte tam kod:
Enum ClothingSize
Small = 30
Medium = 40
Large = 45
XLarge = 50
End Enum
Sub AssignClothingSizes()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(“Sheet1”) ‘ Replace “Sheet1” with your sheet name
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
Dim i As Long
For i = 2 To lastRow ‘ Starting from the second row to skip the header
If IsNumeric(ws.Cells(i, 1).Value) Then
Dim sizeNumber As Long
sizeNumber = CLng(ws.Cells(i, 1).Value)
Dim sizeName As String
Select Case sizeNumber
Case ClothingSize.Small: sizeName = “Small”
Case ClothingSize.Medium: sizeName = “Medium”
Case ClothingSize.Large: sizeName = “Large”
Case ClothingSize.XLarge: sizeName = “XLarge”
Case Else: sizeName = “Unknown”
End Select
ws.Cells(i, 2).Value = sizeName
End If
Next i
ws.Columns(2).NumberFormat = “@” ‘ Set the cell format as text
End Sub
Örnek #2
Aşağıdaki verilere ait puanlara göre notları sınıflandırmak için VBA Enum'ı kullanacağımız bu örneğe bakalım.

- Adım 1: Yeni modülde, dört adlandırılmış sabite sahip “Grade” adlı bir numaralandırma tanımlıyoruz: Başarısız, C, B ve A.

- Adım 2: Bu adımda, Worksheet veri türünde ws adlı bir değişken tanımlıyoruz ve Set ifadesini kullanarak bunu makronun bulunduğu çalışma kitabındaki “Sheet2” adlı çalışma sayfasına atıyoruz.

- Adım 3: Belirtilen çalışma sayfasının A sütunundaki verilerle son satırı hesaplıyoruz. Bunu çalışma sayfasının son satırından başlayarak ve A sütunundaki son boş olmayan hücreyi bulana kadar yukarı doğru hareket ederek yapar.

- Adım 4: Sonra bir döngü oluşturuyoruz. Bu döngü, her satırı, ikinci satırdan (başlığı atlamak için) önceki adımda bulunan son satıra kadar yineliyor.

- Adım 5: Burada, geçerli satırın ilk sütunundaki (sütun A) değerin sayısal olup olmadığını kontrol ediyoruz. Bu, yalnızca sayısal değerler içeren satırların işlenmesini sağlar.

- Adım 6: Sonra, geçerli satırın ilk sütunundaki sayısal değeri tutmak için bir "studentMarks" değişkeni bildiriyoruz. Bu değer, karşılık gelen notu belirlemek için kullanılacaktır.

- Adım 7: Bu Select Case bloğunda, “studentMarks” değerine göre karşılık gelen notu belirliyoruz. “studentMarks” değerine bağlı olarak, uygun notu (“Fail”, “C”, “B”, “A”) grade değişkenine atıyoruz.

- Adım 8 : Burada belirlenen notu mevcut satırın ikinci sütununa (B sütunu) atıyoruz.

- Adım 9: Tüm satırları işledikten sonra bu bölümü kullanarak ikinci sütunun tamamını (B sütunu) metin olarak biçimlendiriyoruz, böylece hücrelerde not adları metin olarak görüntüleniyor.

- Adım 10: Modülü kaydedin ve VBE'den çıkın. Şimdi verilerin mevcut olduğu Sheet2'ye gidin ve makro penceresini açmak için Alt + F8 tuşlarına basın.

- Adım 11: “AssignGrades” VBA makrosunu seçin ve Çalıştır'a tıklayın. Kodu çalıştırdığınızda, B sütununun, yani Notlar sütununun, A sütununda belirtilen puanlara göre Notlarla doldurulduğunu göreceksiniz.

İşte tam kod:
Enum grade
Başarısız (fail)
C
B
A
End Enum
Sub AssignGrades()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(“Sheet2”)
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, “A”).End(xlUp).Row
Dim i As Long
For i = 2 To lastRow ' Başlığı atlamak için ikinci satırdan başlanır
If IsNumeric(ws.Cells(i, 1).Value) Then
Dim studentMarks As Long
studentMarks = CLng(ws.Cells(i, 1).Value)
Dim grade As String
Select Case studentMarks
Case Is < 35: grade = “Fail” Case 35 To 49: grade = “C” Case 50 To 69: grade = “B” Case Is >= 70: grade = “A”
End Select
ws.Cells(i, 2).Value = grade
End If
Next i
ws.Columns(2).NumberFormat = “@” ' Hücre biçimini metin olarak ayarla
End Sub
Verileri Depolamak İçin VBA Sayım Değişkenlerini Kullanma
Bir VBA Enum tanımladıktan sonra, verileri depolamak için o VBA Enum türündeki değişkenleri bildirebilirsiniz. Örneğin:
Dim today As Days
today = TuesdayYukarıdaki örnekte, “today” değişkeni “Days” türündedir ve haftanın herhangi bir gününü saklayabilir.
Dikkat Edilmesi Gereken Önemli Noktalar
- VBA Enum'ları belirsiz ve hatırlanması zor sayıları açıklayıcı isimlerle değiştirerek kodun okunabilirliğini ve sürdürülebilirliğini artırır.
- Sabitler için anlamlı isimler kullanarak VBA Enum'ları kod anlaşılırlığını artırır ve her değerin amacının anlaşılmasını kolaylaştırır.
- Varsayılan tam sayı değerleri 0'dan başlasa da, her sabite özel değerleri açıkça atayabilirsiniz.
- VBA Enum Beispiel, Almancada "örnek" anlamına gelir. VBA Enum'ları, adlandırılmış sabitlerle örnekler veya senaryolar oluşturmak ve kod çizimini geliştirmek için kullanılabilir.
- VBA Enum, ilgili sabitlerin özelleştirilmiş kümelerini oluşturmanıza olanak tanır, böylece kodunuzu daha okunabilir ve kendi kendini açıklayıcı hale getirir.
