| Termin | Definicja |
|---|---|
| ReDim | ReDim to instrukcja VBA zmieniająca rozmiar wcześniej zadeklarowanej tablicy dynamicznej. ReDim w VBA: czym jest zmiana rozmiaru tablicyReDim to instrukcja języka VBA służąca do zmiany rozmiaru tablicy dynamicznej, czyli takiej tablicy, której liczba elementów nie została ustalona na stałe w chwili deklaracji. Dzięki temu rozmiar struktury może zostać dopasowany do rzeczywistej liczby danych pojawiających się podczas wykonywania procedury. Takie rozwiązanie bywa przydatne przy imporcie rekordów, przetwarzaniu wyników zapytań, odczytywaniu zawartości plików oraz budowaniu list zależnych od danych wprowadzonych przez użytkownika. Najczęściej tablicę deklaruje się bez określania jej końcowego indeksu, na przykład za pomocą polecenia Rozmiar tablicy może zostać wyznaczony na podstawie zmiennej, dlatego często spotyka się konstrukcję ReDim Preserve a zwykłe ReDim: kontekst techniczny i porównaniaZwykłe użycie ReDim powoduje utworzenie tablicy o nowym zakresie i może usunąć wartości, które znajdowały się w poprzednim rozmiarze. Przykładowo po wykonaniu Jeżeli dane mają pozostać dostępne, stosuje się wariant W VBA operacja Preserve ma ograniczenie dotyczące wymiarów. W praktyce bezpiecznie przyjmuje się, że przy ponownym wymiarowaniu tablicy wielowymiarowej zmieniany powinien być ostatni wymiar. Dla tablicy zapisanej jako Wybór między ReDim i ReDim Preserve zależy od celu operacji. Gdy zawartość tablicy nie jest już potrzebna, zwykłe ReDim bywa prostsze i może ograniczyć ilość kopiowanych danych. Gdy wcześniejsze wyniki mają zostać zachowane, niezbędne jest Preserve albo zastosowanie innej struktury, takiej jak kolekcja lub obiekt słownikowy. Przy dużych zbiorach danych różnica wydajnościowa może być zauważalna, ponieważ Preserve często tworzy nowy obszar pamięci i przenosi do niego dotychczasowe elementy. ReDim w procedurach VBA: typowe problemy i błędyJednym z częstych problemów jest próba użycia ReDim wobec tablicy zadeklarowanej ze stałym rozmiarem. Kod Inny błąd polega na odwołaniu do elementu przed nadaniem tablicy rozmiaru. Sama deklaracja tablicy dynamicznej nie tworzy jeszcze pozycji dostępnych do zapisu. Przed instrukcją Problemy powoduje również wielokrotne zwiększanie tablicy o jeden element w pętli. Konstrukcja Warto zwrócić uwagę na granice indeksów. VBA może pracować z tablicami zaczynającymi się od zera lub od jedynki, zależnie od użytej składni i ustawień projektu. Zapis ReDim i tablice dynamiczne: praktyczne wskazówki projektowePrzed zmianą rozmiaru tablicy powinno się ustalić, czy potrzebne jest zachowanie zawartości. Jeżeli tablica ma zostać wyczyszczona i zbudowana od początku, zwykłe ReDim jasno komunikuje ten zamiar. Jeżeli kolejne dane mają być dopisywane, należy zastosować ReDim Preserve albo rozważyć kolekcję. Rozdzielenie tych dwóch scenariuszy ułatwia późniejsze utrzymanie kodu i ogranicza ryzyko niezamierzonego usunięcia wyników. Dobrym rozwiązaniem jest przechowywanie aktualnej liczby elementów w osobnej zmiennej. Po dodaniu nowej wartości zwiększa się licznik, a dopiero potem sprawdza, czy zakres tablicy jest wystarczający. W większych procedurach można przeznaczać zapas miejsca i powiększać tablicę dopiero po jego wykorzystaniu. Ogranicza to liczbę operacji kopiowania oraz upraszcza analizę działania pętli. Przykładowy schemat może wyglądać następująco:
Przy pracy z arkuszami szczególnej uwagi wymaga różnica między liczbą wierszy a numerem ostatniego wiersza. Jeżeli dane zaczynają się od drugiego wiersza, liczba rekordów może być mniejsza od numeru ostatniego wiersza. Należy więc obliczyć rzeczywistą liczbę elementów i dopiero na jej podstawie wykonać ReDim. Podobnie przy odczycie pliku tekstowego należy rozstrzygnąć, czy pusta końcowa linia ma być traktowana jako rekord. Warto stosować typy danych odpowiadające zawartości tablicy. Tablica tekstowa powinna być deklarowana jako String, wartości całkowite jako Long, a liczby wymagające części ułamkowej jako Double. Samo ReDim zmienia zakres, ale nie naprawia pomyłki w typie zmiennej. Kontrola wartości wejściowych, obsługa pustych danych i jednoznaczne nazwy zmiennych pozostają równie ważne jak poprawne wymiarowanie. ReDim a serwis komputerowy: kiedy zgłosić się po pomocProblemy z ReDim zwykle ujawniają się jako błędy wykonania, utrata wcześniej zebranych wartości, nieprawidłowa liczba elementów albo zatrzymanie makra podczas pracy z arkuszem. W pierwszej kolejności warto sprawdzić, czy tablica została zadeklarowana dynamicznie, czy instrukcja Preserve jest używana świadomie oraz czy granice indeksów odpowiadają liczbie przetwarzanych danych. Pomocne bywa także uruchomienie kodu krok po kroku i obserwowanie wartości zmiennej określającej rozmiar. Jeżeli awarie makr występują razem z zawieszaniem programu, samoczynnym wyłączaniem komputera, problemami z odczytem plików lub niestabilnością systemu, przyczyna może wykraczać poza sam kod VBA. W takiej sytuacji zgłoszenie do Warszawskiego Pogotowia Komputerowego 24/7 pozwala połączyć sprawdzenie środowiska pracy z analizą objawów występujących podczas uruchamiania procedur. Przed przekazaniem urządzenia warto przygotować opis błędu, nazwę używanego programu oraz informację, po której operacji pojawia się problem. Przy pracy z ważnymi skoroszytami zaleca się wykonanie kopii pliku przed testami, zapisanie wersji makra i unikanie eksperymentów na jedynym egzemplarzu danych. Takie przygotowanie ułatwia odtworzenie sytuacji, w której występuje błąd ReDim, a także pozwala bezpieczniej porównać działanie kodu przed i po wprowadzeniu zmian. |