Tablice dynamiczne

Tablice są bardzo przydatne, gdy potrzebujemy zapisać kilka liczb (np. kolejne wyniki pomiarów). Definiując tablice za pomocą słowa kluczowego Dim zazwyczaj z góry określamy rozmiar tablicy np. zapis

Dim Temp(1 To 10) As Single

Oznacza, że zdefiniowaliśmy tablicę składającą się z 10 elementów (o indeksach od 1 to 10). A co jeśli w trakcie tworzenia aplikacji nie znamy rozmiaru tablicy? Np. tworzymy funkcję, która do tablicy odczytuje kolejne elementy z pliku, ale nie znamy jego rozmiaru?

W takiej sytuacji można zdefiniować tablicę dynamiczną a następnie ustawić jej rozmiar. Deklaracja tablicy dynamicznej wygląda dość podobnie jak zwykłej, z tym że nie podajemy jej rozmiaru.

Dim Tablica() As String

Po zadeklarowaniu tablicy należy później ustawić jej rozmiar za pomocą słowa kluczowego Redim.

Ile = 5
ReDim Tablica(1 To Ile)

W dowolnym momencie można zmienić rozmiar tablicy (nawet takiej, której już wcześniej ustawiono rozmiar za pomocą instrukcji Redim). Należy pamiętać, że instrukcja Redim domyślnie usuwa poprzednią zawartość tablicy! Jeśli chcesz np. zwiększyć rozmiar tablicy i nie usuwać wcześniejszej zawartości, należy dodatkowo użyć słowa kluczowego Preserve:

' Dodajmy jeszcze jeden rekord:
Ile = Ile + 1
ReDim Preserve Tablica(1 To Ile)

Oto przykładowa procedura demonstrująca użycie tablic dynamicznych:

Sub TablicaDynamiczna()
    Dim Tablica() As String
    Dim Imie As String
    Dim Ile As Long, a As Long

    Ile = Val(InputBox("Ilu masz kolegów?", "ile imion", "5"))
    
    'Ustawienie rozmiaru tablicy
    ReDim Tablica(1 To Ile)
    
    'Pobierz imiona od użytkownika
    For a = 1 To Ile
        Imie = InputBox("Podaj imię nr " & CStr(a))
        Tablica(a) = Imie
    Next a
        
    'Zmiana rozmiaru tablicy o 1 (z zachowaniem poprzedniej zawartości)
    Ile = Ile + 1
    ReDim Preserve Tablica(1 To Ile)
    
    'Do listy imion dodajmy jeszcze Chucka Norrisa
    Tablica(Ile) = "Chuck Norris"
    
    ' Wyświetl zawartość tablicy
    For a = 1 To Ile
        Debug.Print a & " element tablicy: " & Tablica(a)
    Next a
End Sub

Wróć do spisu treści