Po wprowadzeniu wstążki w Excelu 2007, obiekt CommandBar zaczął tracić na znaczeniu. Tradycyjne menu i paski narzędzi praktycznie odeszły do lamusa. Obecnie przydają się tylko do modyfikacji wyglądu edytora Visual Basic. Wciąż jednak obecny jest trzeci typ pasków – menu kontekstowe, które pojawia się po kliknięciu w prawy przycisk myszy.
Zapomniany obiekt CommandBar
Obiekt CommandBar posiada trzy typy pasków.

W Excelu, począwszy od wersji 2007, już go nie uświadczymy. Jest on jednak wciąż dostępny w edytorze VBE.

Paski narzędzi
Gdy nie było wstążki, paski narzędzi stanowiły podstawę interfejsu Excela i aplikacji klienckich. Na paskach standardowo umieszczamy przyciski i menu rozwijane.



Menu kontekstowe
Wyskakujące okienko pop-up, które pojawia się po kliknięciu w prawy przycisk myszy na wybranym obiekcie.
Nazywane też często menu podręcznym.
Umieszcza się na nim kontrolki typu button (przyciski) i rozwijane podmenu, które również składają się z przycisków.
Do buttonów przypisujemy makra za pomocą właściwości OnAction.

Kreatywny przykład z książki
Czytając książkę Johna Walkenbacha spodobał mi się pewien przykład. Chodziło w nim o wyświetlenie nazw wszystkich arkuszy w kontrolce typu ListBox na formularzu.
Po wybraniu arkusza, automatycznie stawał się on aktywny. Celem takiego rozwiązania było zapanowanie nad większą ilością zakładek w pliku, łatwiejsza nawigacja i kontrola.
Odkrywanie koła na nowo…
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.
Taka lista arkuszy jest już przecież zaimplementowana w Excelu. Możemy ją uaktywnić klikając prawym klawiszem myszy w jedną ze strzałek w lewym dolnym rogu obok zakładek.
Jest to menu podręczne o nazwie Workbook Tabs.

Żeby mieć szybszy dostęp do takiej listy, możemy napisać makro i podpiąć je pod przycisk. Następnie ten przycisk dodać do wyskakującego menu podręcznego.
Lista arkuszy dostępna „pod ręką”
Krótki kod wyświetla listę arkuszy w pliku. Przyznam szczerze, że nie wiem dlaczego ta kontrolka wygląda inaczej po wywołaniu makrem.
Sub WyswietlListeArkuszy()
CommandBars("Workbook Tabs").ShowPopup
End Sub

Poniższy kod dodaje kontrolkę do menu podręcznego Cell. Uruchamia się ono, po kliknięciu w prawy przycisk myszy. Zaznaczonym obiektem musi być komórka lub zakres komórek.
Sub DodajKontrolke()
Dim cbrPopup As CommandBar ' CommandBar Cell
Dim cbrPrzycisk As CommandBarButton ' Przycisk z listą arkuszy
' Przypisujemy zmienną do menu podręcznego
1 Set cbrPopup = Application.CommandBars("Cell")
' Zresetuj menu podręczne, aby nie dodać dwa razy tego samego przycisku.
' Można ewentualnie usunąć samą kontrolkę:
' - CommandBars("Cell").Controls("&Arkusze w pliku...").Delete
2 CommandBars("Cell").Reset
' Dodajemy nowy przycisk
3 Set cbrPrzycisk = cbrPopup.Controls.Add( _
Type:=msoControlButton, Before:=1, Temporary:=True)
' Dodajemy do menu kontrolkę, określamy jej cechy
4 With cbrPrzycisk
5 .Caption = "&Arkusze w pliku..."
6 .OnAction = "WyswietlListeArkuszy"
7 .FaceId = 53
8 End With
' Zwalniamy miejsce w pamięci
9 Set cbrPopup = Nothing
10 Set cbrPrzycisk = Nothing
End Sub
Nawigacja w praktyce
Po kliknięciu w kontrolkę Arkusze w pliku… wyświetlona zostaje lista wszystkich zakładek w skoroszycie..
Zwróć proszę uwagę na kilka rzeczy:
- Szybki skrót. Listę arkuszy wyświetlisz klikając PPM i klawisz A. Nie musisz klikać myszą w przycisk Arkusze w pliku… – ja zrobiłem to w celach demonstracyjnych.
- Przycisk jest tymczasowy. Oznacza to, że nie będzie go po ponownym uruchomieniu Excela (właściwość Temporary = True).
- Reset menu podręcznego. Przed dodaniem przycisku, resetujemy menu. Nie chcemy mieć bowiem kilku takich samych przycisków Arkusze w pliku…

Na koniec jeszcze jedna bardzo ciekawa rzecz.
Za pomocą zdarzenia Worksheet_BeforeRightClick możemy przechwycić moment kliknięcia w prawy przycisk myszy (PPM). Zdarzenie to posiada dwa parametry: Cancel i Target. Możemy więc zablokować domyślne menu kontekstowe i zamiast niego wyświetlić inne.
Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True ' Nie wyświetlaj domyślnego okienka
Application.Dialogs(xlDialogCalculation).Show
End Sub
Poniżej, w Arkusz1 wyświetlam okienko związane z przeliczaniem danych. W Arkusz2 działa zaś domyślne okienko pop-up.

Podsumowanie
Menu kontekstowe w Excelu to potężne narzędzie, które pozwala na szybki dostęp do przydatnych funkcji i usprawnienie nawigacji. Dzięki prostym makrom można je dostosować do własnych potrzeb, dodając nowe kontrolki lub podmieniając domyślne opcje. To świetny sposób na zwiększenie wygody pracy, zwłaszcza przy dużych plikach i wielu arkuszach.
Plik XLSM
