W czasie kursu stworzyliśmy już kilka makr. Zanim stworzymy dziesiątki i sam stworzysz setki następnych zróbmy podsumowanie różnych metod uruchamiania makr (procedur). Dzięki temu będziesz mógł znaleźć najbardziej wygodną w danej chwili metodę uruchomienia napisanego kodu. Przy okazji oswoimy się bardziej z edytorem VBA, poznamy pierwsze kontrolki i zdarzenia.
Dzięki tym metodom będziesz mógł już w tej chwili na różne sposoby uruchamiać makra nagrane nagrywarką. Np. sprawić, że uruchomi się przy każdym otwarciu pliku, lub przy pomocy przycisku na arkuszu.
Najciekawszy element, czyli zdarzenia zostawiłem na koniec. Miłego czytania!
Okno dialogowe Makro
Ten sposób już praktykowaliśmy. Okno można otworzyć skrótem alt + F8, lub przyciskiem Makra w grupie Kod, na karcie Deweloper. Wystarczy wybrać makro i nacisnąć Uruchom.
Skrót klawiaturowy
W powyższym oknie zaznacz makro i kliknij Opcje…
W polu Klawisz skrótu możemy wpisać dowolną literę. Od teraz po naciśnięciu tego skrótu uruchomi się nasze makro. Trzeba pamiętać, że nadpisuje to domyślne skróty. Na próbę proponuję przypisać makro pod skrót ctrl + v.
Makro auto_open
Jeżeli makro nazwiemy auto_open, będzie ono uruchamiane automatycznie przy otwieraniu danego pliku. Tylko tyle i aż tyle. Postępuję wyjątkowo niedydaktycznie podając ta metodę. Jest bardzo prosta, jednak nie polecam z niej korzystać. Została ona w Excelu, z uwagi na tak zwaną wsteczną kompatybilność, aby pliki ze starych wersji Excel’a wciąż działały prawidłowo. Obecnie ten sam efekt można uzyskać za pomocą tzw. zdarzeń, o których niżej.
Kontrolki formularza
Dwie pierwsze metody są mało przyjazne dla użytkownika. Mogą być przydatne dla nas, szczególnie do testów, jednak użytkownikowi niezaznajomionemu z makrami mogą sprawiać trudność. Ponieważ pewnie często będziesz pisać makra dla innych, najlepiej przypisać je do przycisku umieszczonego na arkuszu.
Przyciski należą do tak zwanych formantów zwanych też często nieformalnie kontrolkami. Druga z tych nazw jest na tyle popularna, że będę ją stosował częściej. Do wyboru mamy kontrolki formularza i ActiveX. Kontrolki formularza są starszym rozwiązaniem, prostszym w obsłudze ale mają mniejsze możliwości niż swoje odpowiedniki ActiveX. W większości przypadków są jednak całkowicie wystarczające.
Aby umieścić przycisk kontrolek formularza, należy na karcie Developer w grupie Formanty nacisnąć Wstaw i wybrać poniższą pozycję.
Kursor zmieni się w krzyżyk, którym można narysować przycisk w dowolnym miejscu. Po narysowaniu pojawi się okienko Przypisz makro, identyczne do okna Makro, w którym wybierzemy makro, które ma być uruchamiane przez dany przycisk. Powyższe przypisanie będzie można za chwilę łatwo zmienić.
Do różnych właściwości tej kontrolki dostaniemy się poprzez kliknięcie jej prawym klawiszem myszy. W podręcznym menu znajdziemy:
- Edytuj tekst – Zmiana tekstu wyświetlanego na przycisku,
- Przypisz makro – Zmiana makra uruchamianego przez przycisk,
- Formatuj formant – Edycja różnych właściwości wizualnych przycisku.
Kontrolki ActiveX
Użycie tych formantów jest nieco bardziej skomplikowane i wymaga użycia zdarzeń. W celu zawarcia pełnego obrazu opiszmy sobie jednak jak to robić. Więcej o zdarzeniach za chwilę. Tego rodzaju przycisk dodaje się podobnie jednak przy pomocy innej ikony.
Po dodaniu przycisku włącza się tryb projektowania (poniższa ikona jest włączona), dzięki czemu możemy edytować właściwości nowego formantu. Po zakończeniu klikamy poniższą ikonę Tryb projektowania, aby nasz przycisk zaczął działać.
Arkusz jest w trybie projektowania, kliknięcie przycisku zaznacza go i nie wywołuje zdarzenia |
Po kliknięciu prawym klawiszem na nowym przycisku w trybie projektowania należy zwrócić uwagę na poniższe opcje, celowo nie są podane w kolejności zgodnej z menu podręcznym.
- Właściwości – Pokazuje właściwości obiektu modelu obiektowego Excela. Jest to okienko bliższe VBA, niż tradycyjnemu Excelowi, więc właściwości mają nazwy w języku angielskim. Właściwości te dotyczą głównie cech wizualnych i pozwalają na znacznie więcej zmian niż jest to możliwe w kontrolce formularza.
- Obiekt commandbutton / edit – Zmiana tekstu wyświetlanego na przycisku,
- Formatuj formant – Kilka podstawowych cech związanych z wyświetlaniem przycisku.
- Wyświetl kod – Jest to najważniejsza pozycja menu, ponieważ odpowiada za logikę związaną z danym przyciskiem.
Po naciśnięciu Wyświetl kod otworzy się okno edytora VBA i Excel utworzy dla nas automatycznie procedurę zdarzenia. Spójrzmy na okno edytora.
- W drzewku projektu zaznaczony jest moduł arkusza, na którym znajduje się nasz przycisk. W oknie z prawej strony znajduje się kod tego modułu, w tej chwili zawiera jedną pustą procedurę.
- Jest to nazwa naszego przycisku, nie mogą istnieć w jednym pliku dwie kontrolki z tą samą nazwą.
- Jest to nazwa zdarzenia,
- Poprzez połączenie nazwy kontrolki i zdarzenia tworzy się procedura zdarzenia. Kod, który wpiszemy w ciało tej procedury wykona się za każdym razem, kiedy użytkownik naciśnie nasz przycisk.
W kodzie zdarzenia możemy bezpośrednio napisać kod lub wywołać procedurę metodami z poprzedniej części kursu. np.:
1 2 3 4 5 6 7 8 9 |
Private Sub CommandButton1_Click() MsgBox "Nacisnąłeś przycisk." End Sub lub Private Sub CommandButton1_Click() NazwaProcedury End Sub |
Zdarzenia
Ze zdarzeniami spotkałeś się już powyżej, omówmy sobie ten temat, ponieważ jest to jedna z podstawowych metod programowania Excel’a.
1 |
Workbook_BeforeClose(Cancel As Boolean) |
Dodawanie zdarzenia
Wystarczy:
- W edytorze wybrać w drzewku projektu moduł Skoroszytu, lub Arkusza.
- Bezpośrednio nad oknem kodu znajdują dwa pola rozwijane. W lewym należy wybrać odpowiednio Workbook, Worksheet lub inny obiekt umieszczony na arkuszu. W drugim polu na liście pojawią się zdarzenia dostępne dla wybranego obiektu.
- Do modułu zostanie automatycznie wpisana procedura obsługi zdarzenia, którą trzeba tylko wypełnić.
Zdarzenia aplikacji można umieszczać w dowolnym module. Wystarczy napisać procedurę:
1 2 3 |
Private Sub App_NazwaZdarzenia(argumenty zdarzenia) 'Nasz kod End sub |
Np.:
1 2 3 4 |
Private Sub App_WorkbookOpen(ByVal Wb As Workbook) Application.Windows.Arrange xlArrangeStyleTiled End Sub |
Pod wcześniej podanymi linkami można bez problemu znaleźć przykłady stosowania każdego ze zdarzeń. Np. tutaj znajduje się opis zdarzenia WorkbookOpen obiektu Application wraz z przykładem.
http://msdn.microsoft.com/en-us/library/office/bb224037(v=office.12).aspx
Wyłączanie zdarzeń
Załóżmy, że chcemy oprogramować zdarzenie związane ze zmianą zawartości komórki na arkuszu.
1 2 3 |
Private Sub Worksheet_Change(ByVal Target As Range) Target.Offset(0, 1) = Target End Sub |
Pod zmienną Target znajduje się zmieniany obiekt. Może to być również zakres, czy wykres, jednak nie będziemy tego tutaj sprawdzać. Dla prostoty załóżmy, że zmieniana jest zawsze pojedyncza komórka. Przypisuję więc przy każdej zmianie wartości komórki do jej sąsiada po prawej.
Skoro to zdarzenie jest wywoływane przy każdej zmianie komórki, to zostanie też wywołane po zmianie sąsiada, co wywoła zmianę kolejnej komórki i następnej itd. Jeżeli w zdarzeniu dokonujemy jakiś działań, które mogą wywołać to samo zdarzenie, należy na czas operacji wyłączyć obsługę zdarzeń. Excel przestanie do odwołania wywoływać nasze procedury zdarzeń, oczywiście aktualna zostanie dokończona.
1 2 3 4 5 |
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False 'Wyłączenie zdarzeń Target.Offset(0, 1) = Target 'Nasza operacja wywołująca zdarzenie Application.EnableEvents = True 'Włączenie zdarzeń End Sub |
Pasek narzędzi Szybki dostęp
Na koniec coś z innej beczki. Począwszy od Excela 2010 możemy dodać Makro do Paska szybkiego dostępu. Lewy, górny róg okna Excel.
- Kliknij Plik/opcje
- Wybierz Pasek narzędzi szybki dostęp
- W polu Wybierz polecenia z: wybierz Makra.
- Na liście poniżej pokażą się makra dostępne w danym pliku.
- Wybierz makro i naciśniej Dodaj >>
- Wybierz makro na liście z prawej strony i naciśnij Modyfikuj.
- Wybierz ikonę i naciśnij dwa razy Ok.
Subskrybuj RSS, lub polub blog na Facebooku aby otrzymywać najnowsze informacje o rozwoju kursu.