Funkcje informacyjne LBound i Ubound

Funkcje informacyjne VBA Lbound i Ubound to funkcje związane ze zmiennymi tablicowymi

LBound – zwraca dolny indeks tablicy

UBound – zwraca górny indeks tablicy

Obie funkcje są wykorzystywane najczęściej w pętli odczytującej poszczególne wartości tablicy. 

  • Na przykład:

    Public Sub NazwaPlik()
    Dim FD As FileDialog
    Dim NazwaPlik As String
    Dim i As Integer
    Dim JTab()
    Set FD = Application.FileDialog(msoFileDialogFilePicker)
    With FD
    .AllowMultiSelect = True
    .Filters.Clear
    .Filters.Add „Pliki Excel”, „*.xls*”
    .Filters.Add „Wszystkie pliki”, „*.*”
    .Title = „Wskaż pliki””
    NazwaPlik = „”
    If .Show Then
    For i = 1 To .SelectedItems.Count
    If i = 1 Then
    ReDim JTab(i)
    Else
    ReDim Preserve JTab(i)
    End If
    JTab(i) = .SelectedItems(i)
    Next i
    End If
    End With
    Set FD = Nothing
    Call OdczytajPliki(JTab)
    End Sub


    Public Sub OdczytajPliki(JTab)
    Dim i As Integer
    Dim JPlik As String
    For i = LBound(JTab) To UBound(JTab)
    JPlik = JTab(i)
    Debug.Print i & „: ” & JPlik
    Next i
    End Sub

    W przykładzie procedury do zmiennej tablicowej zapisywane są pliki wskazane w oknie FileDialog.Picker, a następnie odczytywane w pętli. 

Zmienne tablicowe VBA

Zmienne tablicowe pozwalają na przechowywanie wielu wartości tego samego typu w jednej zmiennej. Istnieją tablice jedno- i wielowymiarowe. Dostęp do poszczególnych wartości zapisanych w zmiennej tablicowej jest poprzez indeks. 

Istnieje kilka sposobów deklaracji zmiennych tablicowych: 

Dim MyTabSt(4) As String Tablica 5 (o indeksach 0 do 4) elementów typu tekstowego
Dim MyTabIn(1 to 5 ) As Integer Tablica 5 (o indeksach 1 do 5) elementów typu liczba całkowita
Dim MyTabVa( )  Tablica dynamiczna nieokreślonej liczby elementów typu liczba Variant

Ja najczęściej stosuję tę ostatnią metodę, określając górną granicę w ramach potrzeb.  Chcąc zwiększyć wartość górnego indeksu, stosujemy konstrukcję:

Redim MyTab(i) 
– gdzie i to wartość górmego indeksu

Trzeba jednak pamiętać o tym, że konstrukcja ta usuwa wszystkie wartości już zapisane w tablicy. Jeżeli chcemy zwiększyć indeks z zachowaniem tych wartości stosujemy:

Redim Preserve MyTab(i)

  • Przykład procedury może wygląda tak:

    Public Sub ZT(n As Integer)
    Dim MojaTablica() As String
    Dim i As Integer
    For i = 1 To n
    If i = 1 Then
    ReDim MojaTablica(i)
    Else
    ReDim Preserve MojaTablica(i)
    End If
    MojaTablica(i) = CStr(i)
    Next i
    End Sub

    W tym przypadku procedura ma argument wejściowy n będący liczbą naturalną. W każdym kroku zwiększany jest rozmiar zmiennej tablicowej MojaTablica, a następnie przypisywana jest do niego wartość. 

Zmienne tablicowe w VBA mogą być wielowymiarowe (do 60 wymiarów), choć w praktyce raczej stosuje się maksymalnie 3 wymiary.