Istnieje kilka różnych sposobów na to, aby odwołać się do konkretnego arkusza w skoroszycie.
Nazwa Zakładkowa
Najczęściej spotykanym rozwiązaniem 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 właśnie sposób odwoływania się do arkuszy.
Indeks Arkusza
Drugim sposobem, bardzo rzadko spotykanym, jest odwołanie się do indeksu arkusza. Indeks arkusza to nic innego jak pozycja arkusza w skoroszycie. Arkusz umieszczony jako pierwszy od lewej ma indeks 1, kolejny 2 itd. Dzięki VBA możemy wskazać dowolny arkusz za pomocą jego indeksu.
Wady Rozwiązań
Oba rozwiązania nie są 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 (świadomie lub nie). Programista może jeszcze poprawić kod, tak aby dostosować go do nowej nazwy. Jeśli tej zmiany dokona jednak 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 utrudni to nawigację. A nam przecież chodzi o to, aby ułatwiać ludziom pracę.
Nazwa Kodowa
Informacje Ogólne
Trzecim sposobem jest odwołanie się do nazwy kodowej arkusza. Nazwa ta nie jest widoczna z poziomu arkusza, dlatego nie ma obawy o to, że użytkownik ją zmieni. Może ona być zmieniona tylko z poziomu edytora VBE lub kodu makra.
Wybierając właściwości konkretnego arkusza w VBE możemy w pierwszej kolejności zmienić właśnie 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ę właściwość obiektu Worksheet.
Wbudowana Zmienna Publiczna
Czym tak naprawdę jest nazwa kodowa? W skrócie możemy powiedzieć, że jest to wbudowana zmienna publiczna odwołująca się do konkretnego arkusza.
Wynika z tego ogromna korzyść – możemy się do niej odwoływać dokładnie w taki sam sposób jak do zmiennej – po wpisaniu jej nazwy pojawi nam 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 sytuacji 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) jak i pozycja arkusza w skoroszycie.
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 tych można używać tylko w pliku, w którym piszemy 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żna 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 uniwersalny kod pokazuje w jaki sposób zmienić nazwę aktywnego arkusza (w sytuacji gdy nie wiemy jaka jest jego nazwa zakładkowa i kodowa).
Sub ZmianaNazwyKodowej()
With ActiveSheet
.Parent.VBProject.VBComponents(.CodeName) _
.Properties("_CodeName") = "wksDane"
End With
End Sub