Makro w Excelu

W poprzednim odcinku przytoczyłem makro-ciekawostkę do Excela. Wpisuje ona nowe polecenie do menu Help, dzięki czemu można w każdej chwili wywołać na ekranie informację o aktualnym czasie i dacie. Celem było pokazanie dużych możliwości języka makropoleceń w programie Excel, zachęcenie czytelników do przesyłania ciekawostek użytecznych dla innych i pobudzenie użytkowników tego programu do sprawdzenia samemu, jakie możliwości kryją się w makropoleceniach.

W poprzednim odcinku przytoczyłem makro-ciekawostkę do Excela. Wpisuje ona nowe polecenie do menu Help, dzięki czemu można w każdej chwili wywołać na ekranie informację o aktualnym czasie i dacie. Celem było pokazanie dużych możliwości języka makropoleceń w programie Excel, zachęcenie czytelników do przesyłania ciekawostek użytecznych dla innych i pobudzenie użytkowników tego programu do sprawdzenia samemu, jakie możliwości kryją się w makropoleceniach.

W dzisiejszym odcinku wrócimy do podstaw, aby mniej wprawnym Czytelnikom pokazać, jak posługiwać się makrodefinicjami Excela. Do tego eksperymentu wybrałem Excela 4.0. Posiadacze wersji 3.0, uzyskają takie same wyniki po drobnych modyfikacjach opisanych makro.

Dwie metody zapisywania makrodefinicji

W Excelu istnieją dwie podstawowe metody zapisywania makrodefinicji: pierwsza polega na rejestrowaniu w arkuszu makrodefinicji czynności wykonywanych na ekranie. Druga, na napisaniu programu w specjalnym języku, także na arkuszu makro.

Obie te metody można połączyć, zaczynając od rejestrowania wykonywanych czynności, a następnie modyfikować zapis w arkuszu makro.

Proste makro

W arkuszu istnieje możliwość automatycznego zapełnienia pewnej liczby komórek, na przykład w celu wpisania kolejnych miesięcy. Jeśli jednak chcemy np. wpisać do arkusza po polsku nazwy kolejnych miesięcy, to pozostaje jedynie pracochłonne wypełnianie komórek. Jeżeli czynność ta ma być często powtarzana, dobrze jest ją zautomatyzować.

W tym celu przemieszczamy do komórki początkowej (w naszym przykładzie będzie to komórka A1) i wywołujemy polecenie Record z menu Macro. Pojawia się okienko dialogowe (rys. 1), w którym należy podać nazwę makro (Rok) oraz określić, za pomocą jakiej litery (w połączeniu z klawiszem Ctrl) makro będzie wywoływane (w naszym przypadku litera "r"). Zwykle Excel proponuje w tym miejscu kolejną wolną literę. Ponadto trzeba określić, czy makro ma być lokalne, a więc ograniczone do jednego arkusza makrodefinicji, czy globalne. W tym celu Excel otworzy nowy arkusz makro o nazwie Macro1, Macro2, itd. Arkusz ten pojawi się na końcu wykazu otwartych arkuszy w menu Window. Aby przy następnym korzystaniu z arkusza makro stało się dostępne, należy otworzyć arkusz, na którym jest ono zapisane. Jeżeli zdecydujemy się na zapisanie tego makro do arkusza globalnego, to będzie ono dostępne po każdym wywołaniu programu Excel.

Teraz wykonajmy zamierzone operacje. Piszemy w kolejnych komórkach wiersza nazwy miesięcy po polsku. Po dojściu do końca wywołujemy polecenie Stop Recorder z menu Macro. Otrzymamy zapis makro o postaci pokazanej na rys. 2. Zapisujemy arkusz makro na dysk, nadając mu nazwę MAK1.XLM. Ponieważ program jest bardzo prosty, nie korzystamy z możliwości dołączania komentarzy. Taka sytuacja jest jednak raczej wyjątkiem niż regułą, w zasadzie każde makro powinno zawierać wyjaśnienia, pozwalające na odtworzenie sposobu jego działania po dłuższym czasie lub przez inne osoby, niż autor. Zauważmy, że w komórce A1 arkusza makro MAK1.XLM zawarta jest nazwa makro i podany skrót klawiaturowy.

W wierszach 2, 4, 6 itd. zawarta jest formuła wybierania komórki arkusza, podana w formie R1C1, R1C2 itd. Jest to postać adresowania bezwzględnego komórek arkusza przez podanie numeru wiersza (R - row, wiersz) i kolumny (C - column, kolumna). Tak więc zapis R1C3 oznacza trzecią komórkę w pierwszym wierszu. Inna forma zapisu tego samego adresu, widoczna na arkuszu, to C1. W wierszach 3, 5 itd. zawarta jest formuła wpisywania tekstu do aktualnie wybranej komórki.

Jak wykonać makro?

Zapisane makro można wykonać na dwa sposoby. Jeden polega na naciśnięciu przypisanej mu kombinacji klawiszy. W naszym przypadku jest to Ctrl-r. Niestety, nie zauważymy wykonania tego makro, ponieważ jego działanie polega na zapisaniu nazw miesięcy w komórkach od A1 do L1. Ponieważ w tych właśnie komórkach zapisaliśmy te nazwy przy rejestracji makro, operacja spowoduje jedynie powtórne ich zapisanie. Można spytać: po co nam takie makro, które nie robi nic użytecznego? Za chwilę, po niewielkich przeróbkach, pokażemy jego użyteczność.

Druga metoda wykonania makro polega na wywołaniu polecenia Run z menu Macro. Pojawia się okienko dialogowe (rys. 3), w którym wybiera się nazwę makro do wykonania. W naszym arkuszu zarejestrowaliśmy tylko jedno makro: Rok.

Modyfikujemy formę zapisu makro

Jeżeli po wykonaniu polecenia Macro Record wywołamy powtórnie menu Macro, stwierdzimy, że dostępne jest między innymi polecenie Absolute Record. Tupiąc myszą zmieniamy je na Relative Record. Oznacza to, że wszystkie operacje będą zapisywane w adresowaniu względnym. Jeżeli np. kursor znajduje się w komórce C1, przejście do komórki D1 zostanie zapisane jako =SELECT("RC[1]"), zamiast =SELECT("R1C4"). Zapis C[1] oznacza przejście w prawo o jedną komórkę. Przejście w lewo zostałoby zapisane jako C[-1]. Po tej zmianie, zapisujemy makro, które będzie miało postać pokazaną na rys. 4. Zapisuje ono nazwy miesięcy w kolejnych komórkach wiersza, poczynając od aktualnego położenia kursora.

Inną modyfikację zapisu pokazano na rys. 5. Jest to postać zalecana. Uzyskałem ją z poprzedniej przez dodanie dodatkowej kolumny, w której zapisuje się nazwy makro. Aby bowiem makro mogło być wykonane, należy nadać pierwszej jego komórce (B1) nazwę, za pomocą polecenia Define Name z menu Formula. Nazwę tę zapisujemy w kolumnie pierwszej. W okienku dialogowym (rys. 6) można także określić kombinację literową, która spowoduje jego wywołanie. Dla ułatwienia uruchamiania, komentarze zapisuje się zwykle w kolumnie trzeciej, która nie ma żadnego wpływu na działanie makro.

W następnym odcinku: kontynuujemy zapisywanie makro.