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. 

Etykieta w kodzie VBA

Etykieta w kodzie VBA to konkretne miejsce w kodzie VBA. Jest to zawsze jedno słowo (ciąg znaków bez spacji) zakończone dwukropkiem.
Linia z etykietą zawsze zaczyna się od pierwszego znaku w danej linii.

If Warunek Then GoTo Etykieta1
   ’ciag instrukcji A
Etykieta1:
  ’ciag instrukcji B
End If

W tym kodzie VBA jeżeli jest spełniony Warunek, za pomocą wyrażenia GoTo następuje od razu skok wykonywania kodu do znajdującej się tuż pod Etykietą1 ciągu instrukcji B, z pominięciem ciągu instrukcji A.
Linia  z etykietą nie zatrzymuje kodu, nie można tez w niej ustawić punktu przerwania.

Generalnie jednak taki przykład kodu nie jest wzorcowy i wprawdzie działa i to skutecznie, ale raczej, jeżeli są inne możliwości, nie powinno się go stosować.
Za to jest to zdecydowanie najlepsze i standardowo stosowane działanie do obsługi błędów wykonania.


 

Szybka zmiana nazwy pliku

Jak szybko zmienić nazwę pliku na dysku?  Można to zrobić kilkoma  różnymi sposobami, np. z wykorzystaniem metod obiektu FileSystemObject:
Przenoszenie pliku
Można tez wykorzystać proste wyrażenie VBA Name.
Działa to tak:

Name StaraNazwa  As NowaNazwa

Zarówno stara jak i nowa nazwa pliku muszą być pełne.  W ten sposób można przenosić pliki również między różnymi dyskami., oczywiście na tym drugim dysku istnieją odpowiednie foldery.

Przykładowy kod może wyglądać tak:

Public Sub ZmianaNazwy()
Dim StaraNazwa As String
Dim NowaNazwa As String
StaraNazwa = „E:\AKTUAL\Wprawki\Obraz1.jpg”
NowaNazwa = „E:Aktual\Wprawki\Obrazy\Obraz2.jpg”
Name StaraNazwa As NowaNazwa
End Sub

Najczęściej występujące błędy wykonania w tym przypadku to:

    • brak pliku do przeniesienia – błąd 53
    • brak folderu na miejscu docelowym przenoszonego pliku – błąd 53
    • przenoszony plik jest otwarty – błąd 75
    • istnieje już plik o nazwie, którą ma mieć przenoszony plik –
      błąd 58.

Za pomocą wyrażenia Name można przenosić także katalogi, ale tylko w ramach tego samego dysku.


Kurs Excel programowanie w VBA