TOP

VBA-Ders 6.2. Veri türleri (Variables)

YouLibreCalc for Excel logo

Bir önceki dersimizde belirli verilerin yazılabildiği ancak birden fazla değer içeremediği değişkenlere bakmıştık. Bu sınırlamayı aşmak için VBA'de birden fazla değeri saklayabilen diziler vardır.


Aşağıda farklı dizilerin bazı örnekleri verilmiştir:

Sub variables()
    'Bir değişken bildirme örneği
    Dim var1 As String
    
    '1 boyutlu bir dizi bildirme örneği
    Dim array1(4) As String
    
    '2 boyutlu bir dizi bildirme örneği
    Dim array2(4, 3) As String
    
    '3 boyutlu bir dizi bildirme örneği
    Dim array3(4, 3, 2) As String
End Sub

Tek boyutlu dizi

Dim array1(4) As String

Tek boyutlu bir dizi, tek sütundan oluşan bir tablo olarak düşünülebilir. Dizi1(4) dizisi 5 kayıt tutabilen tek boyutlu bir dizidir. Neden 5? Çünkü dizideki kayıt sayıları sıfırdan başlar (0, 1, 2, 3, 4).

Şimdi 2 boyutlu bir diziyi ele alalım:

Dim array2(4, 3) As String

Zaten 5 satır ve 4 sütundan oluşan bir tablo gibi görünecek:

'Renkli hücrelere değer atama
array2(0, 0) = "Kırmızı hücredeki değer"
array2(4, 1) = "Yeşil hücredeki değer"
array2(2, 3) = "Mavi hücredeki değer"

Sabitler

Değişkenler gibi sabitler de değerleri depolamak için kullanılabilir ancak aradaki fark, değerlerin değişememesidir. Değerin tekrarlanmasını önlemek için bir sabit ekleyebiliriz, örneğin 13.14:

Sub const_example()
    Cells(1, 1) = Cells(1, 2) * 13.14
    Cells(2, 1) = Cells(2, 2) * 13.14
    Cells(3, 1) = Cells(3, 2) * 13.14
    Cells(4, 1) = Cells(4, 2) * 13.14
    Cells(5, 1) = Cells(5, 2) * 13.14
End Sub

Bu, kodun anlaşılmasını ve düzenlenmesini kolaylaştırır. Ayrıca sabitin değerini oldukça basit bir şekilde değiştirmenize de olanak tanır:

Sub const_example()
   'Bir sabit bildirmek + bir değer atamak
    Const ANNUAL_RATE As Double = 13.14
   
    Cells(1, 1) = Cells(1, 2) * ANNUAL_RATE
    Cells(2, 1) = Cells(2, 2) * ANNUAL_RATE
    Cells(3, 1) = Cells(3, 2) * ANNUAL_RATE
    Cells(4, 1) = Cells(4, 2) * ANNUAL_RATE
    Cells(5, 1) = Cells(5, 2) * ANNUAL_RATE
End Sub

Değişkenlerin kapsamı

Eğer bir değişken bir prosedürün başında bildirilmişse (Sub), o zaman yalnızca bu prosedürde kullanılabilir. Prosedür yürütüldükten sonra değişkenin değeri artık kullanılamayacaktır.

Sub procedure1()
   Dim var1 As Integer
   '=> Değişken yalnızca bu prosedürde geçerlidir
End Sub

Sub procedure2()
   '=> var1 burada kullanılamaz
End Sub

Bir değişkeni herhangi bir modül prosedüründe kullanmak için onu modülün en başında bildirmemiz yeterlidir. Ve bunun gibi bir değişken bildirirseniz, çalışma kitabı kapatılana kadar kullanılabilir olacaktır.

Dim var1 As Integer

Sub procedure1()
   '=> var1 burada kullanılabilir
End Sub

Sub procedure2()
   '=> var1 burada da kullanılabilir
End Sub

Kitabın tüm modüllerinde aynı değişkeni kullanmak istiyorsanız, önceki örnekte yalnızca Dim'yi Global ile değiştirmelisiniz:

Global var1 As Integer

Göründüğü prosedürü yürüttükten sonra bir değişkeni kullanmak için Dim'yi Static ile değiştirin:

Sub procedure1()
    Static var1 As Integer
End Sub

Prosedürdeki tüm değişkenlerin değerlerini kullanmak için, Sub'den önce Static'yi ekleyin:

Static Sub procedure1()
    Dim var1 As Integer
End Sub

Kendi değişken türünüzü oluşturma

İşte kendi türünüzü nasıl oluşturabileceğinize dair hızlı bir örnek:

 'Değişken türü oluşturma
 Type customers
    last_name As String
    first_name As String
 End Type
   
 Sub variables()
    'Bir değişkenin bildirimi
    Dim cust1 As customers
   
    'Müşteri1'e değer atama
    cust1.last_name = "Smith"
    cust1.first_name = "John"
   
    'Kullanım örneği
    MsgBox cust1.last_name & " " & cust1.first_name
 End Sub