| Termin | Definicja |
|---|---|
| Select Case | Select Case to konstrukcja VBA rozgałęziająca wykonanie kodu według wartości jednej zmiennej. Select Case w VBA: czym jest i do czego służySelect Case jest konstrukcją języka VBA używaną wtedy, gdy dalszy przebieg makra zależy od wartości jednego wyrażenia. Najpierw wskazywane jest wyrażenie, na przykład zawartość komórki, numer miesiąca, status dokumentu albo kod zwrócony przez inną procedurę. Następnie sprawdzane są kolejne warianty zapisane w sekcjach Case. Po znalezieniu pierwszego pasującego przypadku wykonywane są przypisane do niego instrukcje, a później analiza tej konstrukcji zostaje zakończona. Takie rozwiązanie pozwala czytelnie opisać wiele możliwych wartości bez powtarzania tego samego warunku w szeregu instrukcji If. Zamiast wielokrotnie porównywać jedną zmienną, można zebrać powiązane decyzje w jednym bloku. Ma to znaczenie zwłaszcza w rozbudowanych makrach, w których wartości są łatwe do nazwania, a poszczególne reakcje powinny być widoczne na pierwszy rzut oka. Podstawowa postać wygląda następująco:
Blok Case Else nie jest obowiązkowy, ale zwykle warto go rozważyć. Może obsłużyć wartość spoza przewidywanego zakresu, pustą komórkę albo sytuację, której nie przewidziano podczas tworzenia makra. Dzięki temu można uniknąć cichego pominięcia danych i wyraźniej zareagować na nieoczekiwany stan. Select Case a If: kontekst techniczny i porównanie podejśćSelect Case oraz If służą do podejmowania decyzji, lecz sprawdzają warunki w nieco inny sposób. Select Case najlepiej pasuje do porównywania jednego wyrażenia z konkretnymi wartościami, zakresami lub grupami wartości. If jest bardziej elastyczne, ponieważ pozwala łączyć różne zmienne, operatory logiczne i zależności, na przykład jednocześnie badać status oraz zawartość innej komórki. Przy kilku prostych wariantach instrukcja If może być wystarczająca. Wraz ze wzrostem liczby możliwości pojawia się jednak ryzyko powstania długiego łańcucha ElseIf. Taki zapis może być poprawny, ale trudniej szybko sprawdzić, jakie wszystkie wartości są obsługiwane. Select Case grupuje warianty według jednej zmiennej, przez co struktura decyzji staje się bardziej uporządkowana. W VBA można używać kilku sposobów zapisu sekcji Case. Pojedyncza wartość jest odpowiednia dla kodu statusu lub numeru. Kilka wartości można połączyć przecinkami, gdy mają wywoływać tę samą reakcję. Przy danych liczbowych można zastosować przedział słowem To, a także warunek z użyciem operatorów Is. Przykład:
Ważna jest kolejność sekcji. Jeżeli zakresy nakładają się na siebie, zostanie użyty pierwszy pasujący Case. Z tego powodu najpierw powinny być umieszczane warianty szczegółowe, a dopiero później ogólniejsze przedziały. Czytelność poprawia też stosowanie nazw zmiennych wskazujących, co jest oceniane, zamiast krótkich i niejasnych oznaczeń. Select Case i typowe problemy w makrachJednym z częstszych problemów jest różnica między wartością liczbową a tekstem. Komórka może wyglądać jak liczba, ale w rzeczywistości przechowywać tekst. W takim przypadku porównanie z wartością liczbową może nie zadziałać zgodnie z oczekiwaniem. Przed użyciem Select Case warto ustalić, jaki typ danych faktycznie jest przekazywany. Pomocne może być jawne przekształcenie wartości, lecz powinno się je wykonywać dopiero po upewnieniu się, że zawartość można bezpiecznie zamienić. Kłopotliwe bywają także dodatkowe spacje, różna wielkość liter oraz puste wartości. Przy analizie tekstu można ujednolicić dane funkcjami Trim i UCase albo LCase, zależnie od przyjętej konwencji. Warto również rozstrzygnąć, czy pusty tekst, wartość Null i błąd arkusza mają oznaczać to samo. Bez takiego rozróżnienia makro może kierować dane do niewłaściwej gałęzi. Niepożądane działanie może wynikać z umieszczenia instrukcji poza właściwym blokiem. Każdy Select Case powinien zostać zamknięty przez End Select. Przy zagnieżdżaniu decyzji trzeba pilnować wcięć i zakresu procedur, ponieważ pomyłka utrudnia ustalenie, do którego Select należy dana sekcja. W praktyce pomaga rozdzielenie długich operacji na mniejsze procedury oraz ograniczenie liczby czynności wykonywanych w pojedynczym Case. Case Else powinien mieć jasno określone zadanie. Może zapisać informację o nieznanej wartości, pominąć rekord albo przerwać dalsze działanie procedury. Nie powinno się pozostawiać tej sekcji bez komentarza, jeśli pominięcie nieobsługiwanych danych może wpłynąć na wynik. W makrach pracujących na wielu wierszach arkusza przydatne jest także wskazanie numeru analizowanego wiersza, aby później łatwiej odnaleźć źródło problemu. Select Case w praktyce: wskazówki projektowe i przykładyPrzed napisaniem bloku warto sporządzić listę wszystkich przewidywanych wartości oraz reakcji programu. Taki prosty etap pomaga wykryć brakujące przypadki, powtarzające się działania i sytuacje, które powinny trafić do Case Else. Jeżeli kilka wartości prowadzi do identycznej operacji, można zapisać je w jednej sekcji zamiast tworzyć wiele niemal takich samych fragmentów kodu. Dobrym zastosowaniem jest przypisywanie opisu na podstawie kodu, wybór sposobu formatowania danych, ustalanie etapu obsługi dokumentu albo kierowanie rekordu do odpowiedniej procedury. Przykładowo:
Jeżeli wykonywane działania są obszerne, lepiej wywołać osobną procedurę niż umieszczać dziesiątki linii bezpośrednio w sekcji Case. Dzięki temu sam wybór pozostaje zwięzły, a szczegóły operacji można testować niezależnie. Warto też unikać modyfikowania zmiennej sterującej wewnątrz bloku, ponieważ utrudnia to zrozumienie, jaka wartość doprowadziła do wykonania danej gałęzi. Przy danych z arkusza należy rozważyć, co powinno się stać, gdy komórka zawiera błąd, jest pusta albo ma zapis niezgodny z przyjętym formatem. Sprawdzenie danych przed Select Case często upraszcza samą konstrukcję i ogranicza liczbę wyjątków. Przydatne jest również dodanie komentarza wyjaśniającego nietypowy przedział lub specjalne znaczenie konkretnej wartości. Select Case w serwisie komputerowym: kiedy zgłosić problemDo serwisu warto zgłosić się wtedy, gdy makro zatrzymuje się na Select Case, zgłasza błąd typu danych, wybiera nie tę sekcję, która powinna zostać wykonana, albo pomija nieznane wartości bez żadnej informacji. Szczególnej uwagi wymaga sytuacja, w której kod modyfikuje wiele arkuszy, usuwa dane lub tworzy dokumenty na podstawie decyzji podejmowanych w tym bloku. Najpierw powinno się zachować kopię pliku i opisać przykład wartości, dla której pojawia się nieprawidłowy rezultat. W ramach Warszawskiego Pogotowia Komputerowego 24/7 naprawy z reguły realizowane są do 3 dni roboczych. Podczas analizy można sprawdzić nie tylko sam fragment VBA, lecz także ustawienia programu, format danych wejściowych, odwołania do arkuszy i zależności między procedurami. Pozwala to odróżnić błąd składni od problemu wynikającego z nieprawidłowej zawartości komórek albo uszkodzonego pliku. Przed przekazaniem materiałów przydatne jest przygotowanie kopii zapasowej, krótkiego opisu oczekiwanego działania oraz informacji, po której czynności pojawia się problem. Jeżeli makro korzysta z plików zewnętrznych, powinno się wskazać, czy błąd występuje przy każdym dokumencie, czy tylko przy wybranych danych. Takie informacje ułatwiają odtworzenie sytuacji i bezpieczne sprawdzenie, czy poprawiona konstrukcja Select Case działa także dla wartości granicznych oraz nieprzewidzianych. |