W VBA możemy się odwołać do wybranego arkusza na kilka sposobów. Rozwiązaniem najbardziej popularnym jest użycie nazwy zakładkowej. Możemy również bazować na pozycji arkusza w pliku. Sposobem zdecydowanie najlepszym jest jednak użycie nazwy kodowej. Czym jest nazwa kodowa i jakie są jej najważniejsze zalety i wady? O tym przeczytasz w tym artykule.
Nazwa zakładkowa
Rozwiązaniem najczęściej stosowanym jest bazowanie na nazwie zakładkowej. Znajduje się ona na dole okna, tuż nad paskiem stanu.
Popularność tego rozwiązania wynika prawdopodobnie z jego intuicyjności i faktu, że makro domyślnie rejestruje taki sposób odwoływania się do arkuszy.
1 2 3 4 5 |
Sub NazwaZakladkowa() Worksheets("Dane").Select End Sub |
Indeks arkusza
Drugim sposobem, rzadziej spotykanym, jest odwołanie się do indeksu arkusza.
Indeks arkusza to nic innego jak pozycja zakładki w skoroszycie. Arkusz umieszczony jako pierwszy od lewej ma przypisany indeks 1, drugi arkusz – indeks 2 itd. Dzięki VBA możemy wskazać dowolny arkusz za pomocą jego indeksu.
1 2 3 4 5 |
Sub IndeksArkusza() Worksheets(1).Select End Sub |
Wady obu rozwiązań
Oba rozwiązania nie są ani pewne ani bezpieczne.
W pierwszym przypadku nazwa arkusza może być w prosty sposób zmieniona zarówno przez programistę jak i przez użytkownika. Zmiana może być świadoma lub przypadkowa.
Programista może jeszcze skorygować kod, tak aby dostosować go do nowej nazwy. Jeśli nazwę zmieni użytkownik, kod nie będzie działać – aplikacja się „wysypie”. Jest to chyba ostatnia rzecz jaką byśmy sobie życzyli.. Oczywiście pewnym rozwiązaniem jest ukrycie nazw zakładek w arkuszu, ale mocno utrudnia to nawigację. A nam chodzi przecież o to, aby ułatwiać ludziom pracę.
1 2 3 4 5 |
Sub BladZakladki() Workheets("NieistniejacaNazwa").Select End Sub |
Nazwa kodowa
Użycie nazwy kodowej jest najlepszym sposobem na odwołanie się do arkusza, jednak sporo osób nie korzysta z tej możliwości.
Informacje ogólne
Nazwa ta nie jest widoczna z poziomu arkusza, dlatego nie musimy się martwić, że ktoś ją przypadkiem zmieni. Można ją zmienić tylko z poziomu edytora lub kodu makra (co pokażę w dalszej części artykułu).
Wybierając właściwości arkusza w edytorze VBA, możemy w pierwszej kolejności zmienić nazwę kodową (Name) jak i nieco później, nazwę zakładkową Name. Wydaje się, że (Name) nie jest tutaj najlepszym określeniem – znacznie lepiej pasowałoby CodeName. Tym bardziej, że tak właśnie nazywa się ta właściwość obiektu Worksheet.
Wbudowana zmienna publiczna
Czym tak naprawdę jest nazwa kodowa? W dużym skrócie możemy powiedzieć, że jest to wbudowana zmienna publiczna odwołująca się do konkretnego arkusza.
1 2 3 4 5 |
Sub NazwaKodowa() wksDane.Select End Sub |
Wynika z tego jedna ogromna korzyść – możemy się do niej odwołać tak samo jak do zmiennej obiektowej. Po wpisaniu jej nazwy pojawi się okienko IntelliSense z listą wszystkich właściwości i metod obiektu Worksheet.
Korzyści stosowania
Jest to bardzo wygodne rozwiązanie, które skraca pisanie makra. Kod jest czytelniejszy niż w przypadku, gdy odwołujemy się do nazw zakładkowych.
Druga korzyść polega na tym, że nie interesuje nas nazwa zakładkowa arkusza – nazwa kodowa jest od niej niezależna. Bez znaczenia jest również pozycja arkusza w skoroszycie.
Trzecia korzyść polega na tym, że otrzymujemy podpowiedzi IntelliSense dla obiektu Worksheet.
Potencjalne wady
Pomimo tych dwóch ogromnych przewag, osoby piszące makra mają obiekcje przed używaniem nazw kodowych. Dlaczego?
Użycie w innych plikach
Pierwszym argumentem jest fakt, że nazw kodowych można używać tylko w pliku głównym, w którym znajdują się makra. Tak naprawdę nie jest to wielkim problemem, bo arkusze z innego pliku możemy zadeklarować jako zmienne publiczne.
Zmiana nazwy kodowej
Drugim argumentem jest to, że nazwy kodowej nie możemy zmienić makrem, ponieważ właściwość CodeName jest tylko do odczytu.
Taka informacja jest tylko w połowie prawdziwa. Faktycznie właściwość ta jest tylko do odczytu, ale nazwę kodową możemy zmienić odwołując się do komponentów VBE.
Poniższy kod pokazuje, w jaki sposób zmienić nazwę kodową aktywnego arkusza.
1 2 3 4 5 6 7 8 |
Sub ZmianaNazwyKodowej() With ActiveSheet .Parent.VBProject.VBComponents(.CodeName) _ .Properties("_CodeName") = "wksDane" End With End Sub |
Podsumowanie
Używanie nazw kodowych arkuszy w VBA to najbezpieczniejszy i najbardziej efektywny sposób na zarządzanie arkuszami w Excelu. Kod staje się bardziej przejrzysty, odporny na zmiany nazw zakładek oraz prostszy w utrzymaniu. Pomimo pewnych ograniczeń, takich jak brak możliwości bezpośredniej zmiany nazwy kodowej makrem, korzyści przewyższają wady, co czyni to narzędzie niezastąpionym w codziennej pracy VBA Developera.