Czytając książkę Johna Walkenbacha „Excel 2003. Programowanie w VBA” spodobał mi się przykład, w którym na formularzu wyświetlone były nazwy wszystkich arkuszy w skoroszycie.
Po wybraniu z listy nazwy konkretnego arkusza, stawał się on aktywny. Celem takiego rozwiązania było zapanowanie nad większą ilością arkuszy w pliku, łatwiejsza nawigacja i kontrola.
Menu Podręczne
O ile rozwiązanie na początku uznałem za bardzo pomysłowe, o tyle po dłuższym namyśle stwierdziłem, że jest to w pewien sposób odkrywanie koła na nowo.
Excel przecież posiada taką listę arkuszy. Możemy ją uaktywnić klikając prawym klawiszem myszy w jedną z czterech strzałek w lewym dolnym rogu (obok zakładek). Jest to menu podręczne o nazwie Workbook Tabs.
Żeby mieć łatwiejszy dostęp do tego menu możemy napisać makro, które pokazuje taką listę arkuszy i podpiąć je pod kontrolkę. Kontrolkę z kolei możemy umieścić na ostatniej pozycji wyskakującego menu, które wyświetla się po kliknięciu prawym klawiszem w komórkę arkusza.
Kod Makra
Poniższe makro wyświetla listę arkuszy w pliku.
Sub WyswietlListeArkuszy()
Application.CommandBars("Workbook Tabs").ShowPopup
End Sub
Poniższe makro dodaje kontrolkę do menu Cell, które uruchamia się po kliknięciu prawym klawiszem myszy w komórkę arkusza.
Sub DodajKontrolke()
Dim cbrPopup As Commandbar
' Przypisujemy zmienną do menu podręcznego
Set cbrPopup = Application.CommandBars("Cell")
' Kasujemy kontrolkę jeżeli jest
On Error Resume Next
cbrPopup.Controls("Sheets List").Delete
On Error GoTo 0
' Dodajemy do menu kontrolkę, określamy jej cechy
With cbrPopup.Controls.Add(Type:=msoControlButton)
.Caption = "Sheets List"
.OnAction = "WyswietlListeArkuszy"
.FaceId = 366
.BeginGroup = True
End With
' Zwalniamy miejsce w pamięci
Set cbrPopup = Nothing
End Sub
Screen
Po kliknięciu w kontrolkę Sheets List wyświetlona zostanie lista arkuszy w pliku.

O jaki fajny bajer. Myślę, że kiedyś na pewno się przyda, ponieważ w firmie potrafią powstać kobylaste pliki 😀
też chętnie wykorzystałbym ten bajer 🙂
prośba o podpowiedź, gdzie należny umieścić te makra?
ps. wrzuciłem je do Objects/ThisWorkbook oraz Modules/Module1 lecz w menu (prawy przycisk myszy) nie pojawiła się “Sheets List”
Darek, oba makra jak najbardziej można wstawić do zwykłego modułu. AddSheetsListControl musi zostać wcześniej uruchomione – można je zatem opcjonalnie umieścić w Workbook_Open.
już działa
dziękuje
Wbudowana nawigacja po arkuszach wprawiła mnie (kiedyś) w zachwyt – na chwilę. Chwila trwała dopóki nie okazało się, że jak arkuszy jest więcej, to owszem ich nazwy wyświetlają się – ale pojawia się tylko część z nich + napis “Więcej arkuszy…”. Klikam ja to “Więcej” i zonk: OKIENKO NA 13 POZYCJI + PASEK PRZEWIJANIA !!! Nie znalazłam sposobu na powiększenie tego !@$^&*() okienka, choć na ekranie zmieściłoby się co najmniej 3 razy więcej pozycji… A że pasków przewijania nie cierpię (zwłaszcza tam, gdzie wystarczyłoby ciut powiększyć okienko / listę) – to wolę już rozwiązanie ze spisem treści i hiperlinkami.
To prawda, w przypadku gdy arkuszy jest więcej trzeba kliknąć Więcej arkuszy…” aby zobaczyć pozostałe. Wadą takiego rozwiązania jest też to, że arkusze są wyświetlane wg miejsca w skoroszycie. W przypadku formularza można pokusić się o listę arkuszy posortowanych alfabetycznie. Jednym słowem – co kto lubi :-).