Kurs VBA – cz. 7 – Jak uruchamiać makra, zdarzenia

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.

 

  1. 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ę.
  2. Jest to nazwa naszego przycisku, nie mogą istnieć w jednym pliku dwie kontrolki z tą samą nazwą.
  3. Jest to nazwa zdarzenia,
  4. 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.:

 

Zdarzenia

Ze zdarzeniami spotkałeś się już powyżej, omówmy sobie ten temat, ponieważ jest to jedna z podstawowych metod programowania Excel’a.

Zdarzenie jest metodą „wbicia” się w standardowy kod Excel’a. Uruchamiając makro przez okno Makro to my inicjujemy wykonanie kodu. Zdarzenia są natomiast inicjowane przez Excel’a. Kiedy naciskamy przycisk myszy Excel otrzymuje od systemu operacyjnego informację, że został naciśnięty przycisk. Ten sygnał mobilizuje go do wielu działań. Przede wszystkim sprawdza gdzie znajduje się kursor. Jeżeli taki kursor znajduje się na przycisku szukane jest zdarzenie NazwaPrzycisku_Click(), jeżeli taka procedura zostanie znaleziona, wykonywany jest jej kod. Tak naprawdę zdarzenia wywoływane są co chwilę podczas pracy z Excelem. Nic się w związku z nimi nie dzieje, póki nie dodamy odpowiedniej procedury z naszym kodem.
Oczywiście w pośredni sposób zdarzenia są wywoływane przez użytkownika, ostatecznie ktoś musi nacisnąć ten przycisk. Jednak należy pamiętać, że przed i po wywołaniu procedury zdarzenia Excel robi dużo innych rzeczy. Dodatkowo czasem jedno działanie użytkownika może wywołać kilka zdarzeń.
Większość istotnych obiektów Excela ma swoje zdarzenia. Dla nas na pewno najważniejsze będą zdarzenia Arkuszy i Skoroszytu. Pod poniższymi linkami znaleźć można opis wszystkich zdarzeń Skoroszytu:
Tutaj natomiast znajdują się zdarzenia arkusza:
Nawet cały Excel ma swój zestaw zdarzeń.
Zdarzenia można znaleźć w grupie Events, oznaczone ikoną błyskawicy. Błyskawica ma być symbolem czegoś „nagłego”, co może zdarzyć się w dowolnym momencie.
Niektóre z tych zdarzeń mają argumenty. Np. zdarzenie
 

ma jeden argument. Jest ono wywoływane za każdym razem, kiedy użytkownik próbuje zamknąć plik. Jeżeli w kodzie procedury odpowiednio ustawimy wartość zmiennej Cancel, zamykanie będzie anulowane i plik zostanie otwarty.
W przyszłości przejdziemy do programowania formularzy. Zobaczysz wtedy, że każdy obiekt formularza (przycisk, pola itp.) też ma swoje zdarzenia.

Dodawanie zdarzenia

Wystarczy:

  1. W edytorze wybrać w drzewku projektu moduł Skoroszytu, lub Arkusza.
  2. 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.
  3. 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ę:

 

Np.:

 

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.

 

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.

 

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.

  1. Kliknij Plik/opcje
  2. Wybierz Pasek narzędzi szybki dostęp
  3. W polu Wybierz polecenia z: wybierz Makra.
  4. Na liście poniżej pokażą się makra dostępne w danym pliku.
  5. Wybierz makro i naciśniej Dodaj >>
  6. Wybierz makro na liście z prawej strony i naciśnij Modyfikuj.
  7. Wybierz ikonę i naciśnij dwa razy Ok.
Nowa ikona pojawi się na pasku. Ikonki te możemy nie tylko wybierać myszą. Po naciśnięciu klawisza Alt, pojawią się na nich cyferki. Wystarczy nacisnąć odpowiednią cyfrę, żeby uruchomić makro.

 


Subskrybuj RSS, lub polub blog na Facebooku aby otrzymywać najnowsze informacje o rozwoju kursu.

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *