1. Kullanıcı Tanımı Tür Nedir

Dizin değişkenleri hakkında yazdığım yazıda bir nesneyi tanımlayan birden fazla bilgiyi bir dizinde tutmanın bazı sıkıntılarından bahsetmiştim, özellikle metin, rakam gibi farklı türlerden bilgi içeren verilerin tek bir dizin içinde tutulması açısından.

Bu tarz farklı türleri tutmak adına her bir değeri farklı bir değişkene atayabileceğiniz değişkenler grubu oluşturabilirsiniz. Bu değişkenler grubuna Kullanıcı Tanımlı Tür veya veri yapıları adı verilir.

2. Kullanıcı Tanımlı Tür Yazılımı

VBA’da kullanıcı tanımlı türler, kullanılmadan önce tanımlanmalıdır bu da genelde “option” ayarlarından sonra, programın başında yer alır. Tanımlama “Type” ile başlar ve “End Type” ile sona erer.  Genel değişken tanımlamalarında olduğu gibi Private veya Public anahtar kelimeleri ile birlikte kullanılabilir. Eğer belirtilmezse genel olarak oluşturulurlar. Örnek olarak:

Private Type TPersonel

Ad as String
Soyad as String
DoğumTarihi as Date
Bolum as String

End Type

gibi bir tür tanımlaması yapabiliriz. Dikkat ederseniz alt değişkenleri tanımlarken “Dim” ifadesi kullanmadım. VBA düzenleyicisi “Type” ifadesini gördükten sonra, “End Type” satırına kadar yazdığınız her satırı bir değişken olarak ele alacaktır. Eğer Bu iki satır arasında “Dim” kullanırsanız hata alırsınız.

Bu aşamada dikkat etmeniz gereken bir başka husus, bu tanımlamanın sadece türün hangi değişkenleri barındırdığını belirlemesidir. Yani tanımlamanın kendisi bir değişken değildir ve bu aşamada değer ataması yapamazsınız. Değer ataması yapabilmek için öncelikle bu türde bir değişken tanımlamamız gerek.

3. Kullanıcı Tanımlı Tür Değişkenleri ve Değer Atama

Bu tarz yapıları program içinde kullanabilmek adına bir değişken tanımlamanız gerek. Bu tanımlama daha önce değindiğim özel, genel değişken şeklinde olabilir. Hatta tanımlanan bu özel türler alt yordamlara değişken olarak yollanabilir, bu durumda ByVal ve ByRef anahtar kelimelerini de kullanabilirsiniz.

Tanımladığını bu değişkenin alt değişkenlerine değişken isminin sonuna “.” koyup ardından alt değişkenin adını yazarak erişebilirsiniz ve değer atayabilirsiniz. Zaten siz “.” karakterine bastığınızda düzenleyici ufak bir pencere içinde alt değişkenlerin listesini gösterecektir. Siz bu pencereden istediğiniz değişkeni seçip “Tab” tuşuna bastığınızda o değişken ismi otomatik olarak yazılacaktır.

Aşağıdaki videoda basit bir örnek gösterdim:

Bu örnekte dikkat ederseniz PersListe adlı ve bu türü tutabilecek bir genel dizin değişkenimiz var. Ancak örnek içinde bir atama yapmadım. İsterseniz şimdi bu değişkenleri kullanan basit bir kod yazalım.

Option Explicit

Private Type TPersonel

Ad As String
Soyad As String
DoğumTarihi As Date
Bolum As String

End Type

Dim PersListe() As TPersonel

Sub Test()

Dim Personel As TPersonel
Personel.Ad = "Ahmet"
Personel.Soyad = "Kurmaz"
Personel.DoğumTarihi = #10/20/1980#
Personel.Bolum = "Üretim"

ReDim PersListe(0)
PersListe(0) = Personel

Call PersonelYaz

End Sub

Sub PersonelYaz()

Dim Ileti As String
Ileti = "Personel Bilgileri:" & Chr(13) & Chr(13) 'Chr(13) Satır atlatır
Ileti = Ileti & "Ad: " & Chr(9) & Chr(9) & PersListe(0).Ad & Chr(13) 'Chr(9) Sekme karakteri
Ileti = Ileti & "Soyad: " & Chr(9) & Chr(9) & PersListe(0).Soyad & Chr(13)
Ileti = Ileti & "Doğum Tarihi: " & Chr(9) & PersListe(0).DoğumTarihi & Chr(13)
Ileti = Ileti & "Bölüm: " & Chr(9) & Chr(9) & PersListe(0).Bolum & Chr(13)

MsgBox (Ileti)

End Sub

Kodu incelerseniz alt programda PersListe(0) ile ben ilgili kullanıcı türüne erişim sağladım. Burada ek bir değişken tanımayıp bu değişkene PersListe(0) elemanı da atayabilirsiniz ancak gereksiz bir uygulama olacaktır.

Kodu çalıştırmadan önce imleci “Sub Test” yazan satıra getirin ve kodu çalıştırın, aşağıdaki gibi bir ileti kutusu gösterilecektir:

Örnek Kod Çalışması

Eğer bu dizin içinde yer alan değişkene programın farklı bir aşamasında erişmek isterseniz aşağıdaki gibi bir koda ihtiyacınız olacaktır:

Kullanıcı tanımlı türler birbiri ile ilişkili olan verileri bir arada tutmak için oldukça güzel bir yöntem. Hatta kullanım tarzına baktığımızda oldukça güdük bir sınıf yapısına sahip diyebiliriz. Tabii bazı kısıtlamaları da var:

1. Kullanıcı tanımlı türlerin alt değişkenlerine döngü ile erişemezsiniz. Yani çok fazla değişkeniniz var ise bunlara sadece değişken ismi ile erişebilirsiniz.

2. Kullanıcı tanımlı türlerin alt değişkenlerine bir değer atadığınızda bu değerin doğruluğunu, misal yaş eksi olamaz gibi, tetkik etmek için her seferinde bir alt yordam çağırmanız gerek. Otomatik olarak bu tetkiki yaptırmak mümkün değil.

3. Kullanıcı tanımlı türler koleksiyon değişkenlerinde kullanılamaz. Koleksiyon değişkenlerini gelişmiş bir dizin değişkeni olarak düşünebilirsiniz.

4. Sınıflarda olduğu gibi bu tarz yapıların “New” anahtar kelimesi ile yeni bir oluşum oluşturamazsınız. Sınıflar ile ilgili yazımda bu konuyu daha ayrıntılı anlatacağım. 

Bu kısıtlamaları sınıflar ile aşabiliyoruz. Tabii sınıflar ayrı bir yazı konusu.

İlginizi Çekebilecek Diğer Yazılar
Etiketler: , , , ,

Leave a Reply