Bu öğretici, VBA'da dinamik dizilerin (redim ve redim koru) nasıl kullanılacağını gösterecektir.
Dinamik Dizi
Dinamik Diziler boyutları değiştirebilen dizilerdir (aksine statik diziler, statik olan).
Dinamik bir diziyi bildirmek için diziyi bildirirsiniz, ancak dizi boyutunu atlarsınız:
1 | Dim strNames() As String |
Ardından, dizinize değer atamadan önce diziyi istediğiniz boyuta ayarlamak için ReDim İfadesini kullanmanız gerekir:
1 | ReDim strNames(1 ila 3) |
Şimdi, dizi boyutunuzu değiştirmek istediğinizde, ReDim'i (veya aşağıda öğreneceğimiz gibi ReDim Preserve) kullanmanız yeterlidir.
Dinamik Varyant Dizileri
Not: Varyant Dizileri biraz farklıdır. Varyant dizilerde, değerleri atamadan önce dizi boyutunu ReDim ile ayarlamanız gerekmez.
12345678 | Alt TestArray()'değişkeni bildirDim varNames() Varyant Olarak'diziyi doldurvarNames() = Array("Fred", "Wilma", "Barney", "Betty")'değerleri döndürMsgBox Join(varNames, ",")Alt Bitiş |
Redim vs. Redim Koru
NS Yeniden Karartma deyimi bir diziyi yeniden boyutlandırır, temizleme mevcut tüm değerler.
NS ReDim Koru deyimi bir diziyi yeniden boyutlandırır, tutmak (“korumak”) mevcut tüm değerleri.
ReDim'i kullanma
Uygulamada, bir diziyi ReDim ile yeniden boyutlandırmak şöyle görünür:
123456789101112 | Alt TestReDim()'dize dizisini bildirDim strNames() As String'3 değeri tutabilmek için dize dizisini yeniden boyutlandırınReDim strNames(1 ila 3)'diziyi 3 adla doldurunstrNames(1) = "Mel"strNames(2) = "Steve"strNames(3) = "Bob"'sonucu hemen pencerede gösterDebug.Print Join(strNames, vbCrLf)Alt Bitiş |
ReDim Korumasını Kullanma
Bu örnekte, ilk dinamik diziyi ayarlamak için ReDim'i ve ardından diziyi yeniden boyutlandırmak için ReDim Preserve'ı kullanacağız, tutmak orijinal değerler:
1234567891011121314151617 | Alt TestReDim()'dize dizisini bildirDim strNames() As String'3 değeri tutabilmek için dize dizisini yeniden boyutlandırınReDim strNames(1 ila 3)'diziyi doldurstrNames(1) = "Mel"strNames(2) = "Steve"strNames(3) = "Bob"'sonucu hemen pencerede gösterDebug.Print Join(strNames, vbCrLf)'redim ama verileri koruReDim strNames'i koru(1 ila 4)strNames(4) = "Fred"'sonucu hemen pencerede gösterDebug.Print Join(strNames, vbCrLf)Alt Bitiş |
kullanmazsanız KORUMAK deyimi, daha önce dizide bulunan verileri kaybedersiniz.
Yukarıdaki pencerede, dizi Mel, Steve ve Bob'u doldurdu. Yeniden bildirildiğinde, bu değerleri kaldırır ve bunun yerine 3 boş değer ve ardından 'Fred' değerini döndürür. Bunun nedeni KORUMAK ifadesi atlanıyor.